1、scikit-learn库简介
scikit-learn是一个整合了多种常用的机器学习算法的Python库,又简称skLearn。scikit-learn非常易于使用,为我们学习机器学习提供了一个很好的切入点。
2、机器学习基础
机器学习这门学科主要分为有监督学习、无监督学习,以及强化学习。有监督学习指的是使用有类标的训练数据构建模型,我们可以使用这个训练得到的模型对未知数据进行预测。有监督学习主要分为两大类:分类和回归。无监督学习中,我们无法事先获知各训练样本的类标值,我们需要去处理这种无类标数据或者是总体分布趋势不明朗的数据,通过无监督学习,我们可以在没有已知输出变量和反馈函数指导的情况下提取出数据集中有效信息来探索数据集的整体结构。无监督学习主要分为聚类和降维。强化学习可以理解为构建一个系统,在与环境交互的过程中提高系统的性能。 我们在创建机器学习算法模型时,通常把数据分为训练集和测试集,使用训练集数据去训练模型,再用测试集来评估模型。
3、用scikit-learn实现有监督学习-分类
我们用Iris数据集来训练一个分类模型,该数据集中的数据采自三种不同的鸢尾花卉(分别是山鸢尾、变色鸢尾、维吉尼亚鸢尾),这些数据表示的是萼片和花瓣的长宽,每组数据都有一个类标。在做机器学习解决分类问题的算法模型时,常常都会使用到这个数据集,scikit-learn库内置了该数据集。我们这里来处理一个任务:给定一种鸢尾花的测量数据,为该花卉分类,这里使用k近邻分类器最简单,k近邻算法搜索训练集,寻找与该数据个体最相似的k个数据。我们把给定的数据分为训练集和测试集,下面为Python实现:
import numpy as np from sklearn import datasets np.random.seed(0) #导入数据 iris=datasets.load_iris() X=iris.data y=iris.target #打乱数据集中的元素 i=np.random.permutation(len(iris.data)) #前140条用作训练集,后10条用作测试集 X_train=X[i[:-10]] y_train=y[i[:-10]] X_test=X[i[-10:]] y_test=y[i[-10:]] #使用k近邻分类器进行训练 from sklearn.neighbors import KNeighborsClassifier knn=KNeighborsClassifier() knn.fit(X_train,y_train) #预测测试集的目标值 result=knn.predict(X_test) print(result) print(y_test) ''' 打印结果为: [1 2 1 0 0 0 2 1 2 0] [1 1 1 0 0 0 2 1 2 0] '''
可以看到,预测的目标值错了一个~
4、用scikit-learn实现有监督学习-回归
这里讲的是线性回归,线性回归指的是用训练集数据创建线性模型的过程。可以用直线方程表示:y=a*x+c ,我们计算出参数a和c,也就建好了这个线性回归模型,在计算a和c时,要保证数据集最小化残差平方和。在这个方程式中,x为训练集,y为目标值,a为斜率,c为模型所对应的直线的截距。这里再介绍一下Diabetes数据集,包含了大量糖尿病患者的生理数据以及一年后的病情发展情况,数据中前10列为生理数据,后者为目标值,下面我们就用这个数据集来练练手。
#导入线性回归模型 from sklearn import linear_model linereg=linear_model.LinearRegression() #导入数据集并划分为训练集和测试集 from sklearn import datasets disabets=datasets.load_diabetes() X_train=disabets.data[:-20] y_train=disabets.target[:-20] X_test=disabets.data[-20:] y_test=disabets.target[-20:] #训练模型 linereg.fit(X_train,y_train) #预测 result=linereg.predict(X_test) print(result) print(y_test) ''' 打印结果为: [197.61846908 155.43979328 172.88665147 111.53537279 164.80054784 131.06954875 259.12237761 100.47935157 117.0601052 124.30503555 218.36632793 61.19831284 132.25046751 120.3332925 52.54458691 194.03798088 102.57139702 123.56604987 211.0346317 52.60335674] [233. 91. 111. 152. 120. 67. 310. 94. 183. 66. 173. 72. 49. 64. 48. 178. 104. 132. 220. 57.] ''' #评价 score=linereg.score(X_test,y_test) print(score) ''' 打印结果为: 0.5850753022690574 '''
5、小结
上面只讲了k近邻分类和线性回归两个学习模型,sklearn中还内置了很多其他机器学习算法模型,其中分类算法模型有K近邻、支持向量机分类、逻辑回归、随机森林、决策树、朴素贝叶斯分类器等,回归算法有线性回归、岭回归、支持向量机回归、贝叶斯回归、多项式回归等,聚类算法又包含有Knn、Kmeans等。sklearn在Python数据分析中经常会用到,常常会配合numPy、matplotlib、pandas等库一起使用,我也刚接触Python机器学习两三个月,就不多说了,以免误人子弟,如有错误欢迎指正!