Python计算机视觉与深度学习实战
上QQ阅读APP看书,第一时间看更新

1.4 回归

回归是研究一组随机变量()之间关系的统计分析方法。分类问题预测的是样本所属的有限个类别,其预测目标是离散的,而回归问题预测的是样本的某项属性值,此属性值的取值范围可能有无限多个,其预测目标是连续的。比如在天气预报中,预测明天是晴天还是雨天,是一个分类问题,而预测明天的气温是多少度,就是一个回归问题了。

在sklearn中,也提供了众多的回归模型,其中常用的回归模型有:线性回归、岭回归、LASSO回归、SVR、回归决策树等。

1.4.1 线性回归

下面以1.2.1节中提到的波士顿房价数据集演示线性回归模型的建模流程,基本与分类模型一致:

>>> from sklearn.datasets import load_boston
>>> from sklearn.linear_model import LinearRegression
>>> data = load_boston()
>>> clf = LinearRegression()
>>> x = data['data']
>>> y = data['target']
>>> # 训练模型
... clf.fit(x,y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
>>> # 只预测一部分值便于画图
... y_pred = clf.predict(x[:20])
>>> # 绘制房价曲线
... plt.figure(figsize=(10,5))
<Figure size 1000x500 with 0 Axes>
>>> plt.plot(y_pred,linestyle = '--',color = 'g')
[<matplotlib.lines.Line2D object at 0x0000000011A284A8>]
>>> plt.plot(y[:20],color = 'r')
[<matplotlib.lines.Line2D object at 0x000000001384BB00>]
>>>
>>> plt.show()

上述代码利用load_boston函数导入了波士顿房价数据集,并将数据集分成了xy两个部分,整理好数据集之后,利用LinearRegression类中的fitpredict方法完成了线性回归模型的训练与预测,并将预测结果绘制成折线图展示出来。预测结果的折线图如图1-8所示。

图 1-8 房价预测曲线

我们可以看到,预测出来的房价(虚线)和真实房价(实线)之间的整体趋势相近,但是部分点有较大差距。为了更精确地描述回归模型的建模效果,我们需要有确定的评价指标。

1.4.2 回归模型评价

常用的回归模型的评价指标有3个。

  • 均方误差mean_squared_error)。预测值与真实值之间的误差的平方的平均值,其公式如下:

     

  • 绝对平均误差mean_absolute_error)。预测值和真实值之间的误差的绝对值的平均值,其公式如下:

     

  • 决定系数r2_score)。决定系数的分母为原始数据的离散程度,分子为预测数据与原始数据之间的误差,二者相除可以消除原始数据离散程度的影响。决定系数用于表示回归值对真实值的拟合程度,其值越接近于1,表示拟合效果越好,其公式如下:

在sklearn中使用3个评价指标的示例代码如下:

from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score
y_pred = clf.predict(x)
print("MSE",mean_squared_error(y_pred,y))
print("MAE",mean_absolute_error(y_pred,y))
print("r2_score",r2_score(y_pred,y))

结果如下:

MSE 21.894831181729202
MAE 3.2708628109003137
r2_score 0.6498212316698562