线性模型
线性回归,又叫最小二乘法(ordinary least squares,OLS),它是一种经典的线性方法,很常用也很强大。
该模型有个公式,对于回归问题来说,是这样子的:
y-hat(y上面有个帽子形状)就是指预测的结果。其中w为系数,b为截距,类似于我们学过的线性方程。x从1到n表示有n个特征,对于每一个x,都有对应的w作为它的权重。
线性回归的目的,就是找到这样的w和b,使预测的结果y-hat与真实的结果y之间的均方误差最小。假设我们有m个样本数据,那么可以表示为
我们的目的就是使上式的值最小。
实战
这次我们使用波士顿数据集来让你体会最小二乘法。
首先,加载该数据集
from sklearn.datasets import load_boston
接着,加载我们的线性回归模型
from sklearn.linear_model import LinearRegression
然后,把数据集分成训练集和测试集
boston = load_boston()
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(boston.data,boston.target)
把训练集的数据“喂”给我们的线性模型
LR = LinearRegression()
LR.fit(X_train,y_train)
好,训练完成,我们可以查看权重系数w和截距b。
权重w保存在coef_属性中(注意下划线不要漏掉)。
LR.coef_
array([-1.18925565e-01, 5.39588740e-02, -1.45929546e-03, 3.14573829e+00,
-1.69581780e+01, 3.69869054e+00, -4.82293735e-03, -1.46033047e+00,
2.85704971e-01, -1.06439695e-02, -9.03668706e-01, 8.38554688e-03,
-4.84033054e-01])
截距b保存在intercept_属性中(同样注意下划线)
LR.intercept_
35.485902475407016
最后,我们来分别看下模型在训练集中和测试集中的精度。
LR.score(X_train,y_train)
0.7244238928965149
可以看出,模型在训练集中的精度约为72.4%。
LR.score(X_test,y_test)
0.7770130001164529
而模型在测试集中的精度为77.7%左右。
模型优点
线性回归的优点就是应用广泛,解释性强,模型也不复杂,面对小型数据集精度也很高。
模型缺点
与此同时,由于模型不用调节什么参数,使得它更难被“控制”,很容易发生过拟合,尤其是面对有大量特征的数据集时。
那有没有什么方法能控制模型的复杂度呢?下一篇我们就要介绍两种防止过拟合的方法。