基本数据表是二维表格数据其中,一行表示一个样本,一列表示一个相关特征,同时对于有监督学习而言,还需要一列特征充当标签列,通常再数据读取为DataFrame格式,方便前期探索
特征矩阵简称X,它通常用DataFrame或者Numpy数组表示,目标数组简称y,一般是一维数组 通常用一维Numpy数组或者pandas的Series表示
In [1]:import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt
In [3]:
iris = pd.read_csv('iris (1).txt', header=None) iris.head()
Out[3]:
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
#所以需要对原始数据进行转化,转化为Scikit-Learn常用的数据输入格式 iris_X = iris.iloc[:, :-1].values iris_y = iris.iloc[:, -1].values
2.Scikit-Learn模型评估器(内部保存了定义原始模型的,函数和类)利用SK建模过程就是实列化对应算法模型评估器
Scikit-Learn评估器器 API 的使用步骤
(1)通过从 Scikit-Learn 中导入适当的评估器器类,选择模型类。 (2)⽤用合适的数值对模型类进行实例化,配置模型超参数(hyperparameter)。 (3)整理数据,通过前面介绍的⽅法获取特征矩阵和目标数组。 (4)调用模型实例的fit( )方法对数据进行拟合。 (5)对新数据应用模型:
在有监督学习模型中,通常使用 predict( ) 方法预测新数据的标签;
在无监督学习模型中,通常使用 transform( ) 或predict( )方法转换或推断数据的性质。
3.利用评估器建模
参考文献:https://scikit-learn.org/stable/user_guide.html
参考文献:https://scikit-learn.org/stable/
3.1回归类算法示例:简单线性回归
In [7]:#创建一个数据集 x = 10 * np.random.rand(50) y = 2 * x - 1 + np.random.rand(50) plt.plot(x, y,"o")Out[7]:
[<matplotlib.lines.Line2D at 0x151394ffa20>]
3.1.1 选择模型类
In [8]:#导入线性回归模型 from sklearn.linear_model import LinearRegression
3.1.2选择模型超参数
请注意,模型类与模型实例不同。当我们选择了模型类之后,还有许多参数需要配置。根据不不同模型 的不不同情况,你可能需要回答以下问题。
●我们想要拟合偏移量(即直线的截距)吗?
●我们需要对模型进行归⼀一化处理理吗?
●我们需要对特征进行预处理以提高模型灵活性吗?
●我们打算在模型中使用哪种正则化类型?
●我们打算使用多少模型组件?
In [9]:#对于现在这个线性回归示例例来说,可以实例例化LinearRegression类并⽤用fit_intercept 超参数设置是否想要拟合直线的截距 model = LinearRegression(fit_intercept=True)
参数说明:
fit_intercept:是否计算截距,默认为False,即默认数据已进行居中处理;
normalize:是否归一化,在不计算截距的时候将忽略该参数;
copy_X:是否将输出结果覆盖原始X值;
n_jobs:启动多少任务进行计算,默认为1,当输入-1时会利用CPU所有线程进行计算。
遇到不明白的API参数是一种常态,而Scikit-Learn本身也提供了非常完善的API参数说明,该说明可在官网上进行查看(http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression)
属性解读:
coef_:回归模型最终各自变量的系数;
intercept_:模型独立项的值,即线性回归中的截距
3.1.2 调整数据结构
In [12]:x= x.reshape([-1, 1]) x.shapeOut[12]:
(50, 1)3.1.3 训练模型 In [13]:
model.fit(x, y)Out[13]:
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)fit( )命令会在模型内部进行大量运算,运算结果将存储在模型属性中,供用户使用。在Scikit-Learn中,所有通过 fit( )⽅方法获得的模型属性都带一条下划线 In [14]:
model.coef_#斜率Out[14]:
array([2.00452634])In [15]:
model.intercept_#截距Out[15]:
-0.5094694914638627
3.1.4 预测新数据的标签
模型训练出来之后,有监督机器学习的主要任务就变成了对不属于训练集的新数据进行预测。在 Scikit-Learn中,我们⽤用predict( )方法进行预测。 “新数据”是特征矩阵的x坐标值,我们需要用模型预 测出目标数组的y轴坐标,注意此处要对其数据行列格式进行转换
In [16]:xfit = np.linspace(-1, 11).reshape([-1, 1]) # 默认⽣生成50个数 ytest = 2 * xfit - 1In [17]:
yfit = model.predict(xfit)In [18]:
yfitOut[18]:
array([-2.51399584, -2.02309142, -1.53218701, -1.0412826 , -0.55037819, -0.05947378, 0.43143063, 0.92233504, 1.41323945, 1.90414386, 2.39504827, 2.88595268, 3.37685709, 3.8677615 , 4.35866592, 4.84957033, 5.34047474, 5.83137915, 6.32228356, 6.81318797, 7.30409238, 7.79499679, 8.2859012 , 8.77680561, 9.26771002, 9.75861443, 10.24951885, 10.74042326, 11.23132767, 11.72223208, 12.21313649, 12.7040409 , 13.19494531, 13.68584972, 14.17675413, 14.66765854, 15.15856295, 15.64946736, 16.14037177, 16.63127619, 17.1221806 , 17.61308501, 18.10398942, 18.59489383, 19.08579824, 19.57670265, 20.06760706, 20.55851147, 21.04941588, 21.54032029])
3.1.5 模型评估
建模完成后,即可对模型进行评估, sklearn的模型评估相关函数全都保存在metrics模块中,且不同 模型有对应的评估指标体系函数与之对应,同时和其他具体算法函数一样,提供了非常详细的用户使 用API说明手册:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
此处使用均方误差和r方作为评估指标,评估上述建模结果
In [21]:from sklearn.metrics import mean_squared_error, r2_score mean_squared_error(ytest, yfit)Out[21]:
0.26359136168967184In [22]:
r2_score(ytest, yfit)#r⽅方越趋近于1,拟合度越⾼高Out[22]:
0.9947238657178129