Python数据分析常见库介绍之Scikit-Learn
往期回顾:
Python数据分析常见库介绍之Numpy
Python数据分析常见库介绍之Scipy
Python数据分析常见库介绍之Pandas
Python数据分析常见库介绍之Matplotlib
Scikit-Learn是Python下一个机器学习相关的库,它提供了强大的机器学习工具,包括数据预处理、分类、回归、聚类、预测和模型分析等。Scikit-Learn依赖于numpy、scipy和matplotlib,因此,需要提前安装这些库才能安装好Scikit-Learn,在Python里面,Scikit-Learn写作sklearn库。
创建一个机器学习的模型很简单,如下:
代码示例
from sklearn.linear_model import LinearRegression #导入线性回归方程model = LinearRegression() #建立线性回归方程print (model)
所有模型提供的接口
model.fit():训练模型,对于监督模型来说是fit(X,Y),对于非监督模型是fit(X)。
监督模型提供的接口
model.predict(X_new):预测新样本。
model.predict_proba(X_new):预测概率,仅对某些模型有用(比如线性规划)。
model.score():得分越高,fit越好。
非监督模型提供的接口
model.transform():从数据中学到新的“基空间”。
model.fit_transform():从数据中学到新的基并将这个数据按照这组“基”进行转换。
(上述内容参考于《Python数据分析与挖掘实战》一书)
数据集
Scikit-Learn库提供了许多数据集,包括:
数据集 | 代码 |
自带的小数据集 | sklearn.datasets.load_<name> |
可在线下载的数据集 | sklearn.datasets.fetch_<name> |
计算机生成的数据集 | sklearn.datasets.make_<name> |
svmlight/libsvm格式的数据集 | sklearn.datasets.load_svmlight_file(...) |
从买了data.org在线下载获取的数据集 | sklearn.datasets.fetch_mldata(...) |
以常用的鸢尾花数据集为例,它是自带的小数据集,包含150个鸢尾花的观测值:萼片长度、宽度,花瓣长度和宽度,还有它们的亚属:山鸢尾(setosa,label=0)变色鸢尾(versicolor,label=1)和维吉尼亚鸢尾(virginica,label=2)。
代码示例
from sklearn.datasets import load_iris#加载数据集iris=load_iris()print (iris.keys())#输出结果 dict_keys(['target', 'DESCR', 'data', 'target_names', 'feature_names'])#数据的条数和维数print(iris.data.shape) #输出结果 (150, 4)import numpy as npprint(iris.target_names) #输出: ['setosa' 'versicolor' 'virginica']np.bincount(iris.target) #输出: array([50, 50, 50], dtype=int64)
数据可视化
import matplotlib.pyplot as plt#以第3个索引为划分依据,x_index的值可以为0,1,2,3x_index=3color=['blue','red','green']for label,color in zip(range(len(iris.target_names)),color):plt.hist(iris.data[iris.target==label,x_index],label=iris.target_names[label],color=color)plt.xlabel(iris.feature_names[x_index])plt.legend(loc="Upper right")plt.show()#画散点图,第一维的数据作为x轴和第二维的数据作为y轴x_index=0y_index=1colors=['blue','red','green']for label,color in zip(range(len(iris.target_names)),colors):plt.scatter(iris.data[iris.target==label,x_index],iris.data[iris.target==label,y_index],label=iris.target_names[label],c=color)plt.xlabel(iris.feature_names[x_index])plt.ylabel(iris.feature_names[y_index])plt.legend(loc='upper left')plt.show()
线性回归
#导入鸢尾花数据集并获取前两列数据,即获取花瓣的长和宽,分别存储至x和y数组x = [n[0] for n in iris.data]y = [n[1] for n in iris.data]x = np.array(x).reshape(len(x),1)y = np.array(y).reshape(len(y),1)#导入线性回归模型,进行训练和预测from sklearn.linear_model import LinearRegressionclf = LinearRegression()clf.fit(x,y)pre = clf.predict(x)#评估算法print (u"系数", clf.coef_) #系数 [[-0.05726823]]print (u"截距", clf.intercept_) #截距 [3.38863738]print (np.mean(y-pre)**2) #1.9199121408845605e-31#假设现在存在一个花萼长度为6.0的花,需要预测其花萼宽度print (clf.predict([[6.0]])) #[[3.04502798]]
Kmean聚类
#导入kmeans聚类模型from sklearn.cluster import KMeansclf = KMeans()clf.fit(iris.data, iris.target)predicted = clf.predict(iris.data)#获取花卉两列数据集X = iris.dataX1 = [x[0] for x in X]X2 = [x[1] for x in X]#做散点图plt.scatter(X1, X2, c=predicted, s=200,cmap=plt.cm.Paired)plt.show()
上面只是简单介绍了两种算法,除去之外,Scikit-Learn库还提供了支持向量机,朴素贝叶斯等等多种机器学习算法。你能快速的调用库,并进行数据挖掘。
数据分析常见库的阶段就此结束了,我们基本掌握了数据分析最常使用的工具,在下一阶段,我们将开始进行数据探索。