回顾一下第2章中介绍的自适应线性神经元(Adaptive Linear Neuron,Adaline):人工神经元中使用了一个线性激励函数,同时还定义了一个代价函数J(·),通过梯度下降(Gradient Descent,GD)、随机梯度下降(Stochastic Gradient Descent,GD)等优化算法使得代价函数最小,从而得到相应的权重。Adaline中的代价函数就是误差平方和(Sum of Squared Error,SSE),它等同于我们定义的OLS代价函数:
其中,为通过得到的预测值(注意,此处的系数1/2仅是为了方便推导GD更新规则)。本质上,OLS线性回归可以理解为无单位阶跃函数的Adaline,这样我们得到的是连续型的输出值,而不是以-1和1来代表的类标。为了说明两者的相似程度,使用第2章中实现的GD方法,并且移除其单位阶跃函数来实现我们第一个线性回归模型:
如果读者需要补习权重更新的内容——为何沿着与梯度相反的方向前进一步,请再复习第2章中的相关内容。
为了在实践中熟悉LinearRegressionGD类,我们使用了房屋数据集中的RM(房间数量)作为解释变量来训练模型以预测MEDV(房屋价格)。此外,为了使得梯度下降算法收敛性更佳,在此对相关变量做了标准化处理,代码如下:
第2章中曾介绍过,梯度下降算法能够进行收敛性检查,使用这类优化算法时,将代价看作迭代次数的函数(基于训练数据集),并将其绘制成图是个非常好的做法。简而言之,我们将再次绘制迭代次数对应的代价函数的值,以检查线性回归是否收敛:
从下图中可以看到,经过第5次迭代后,GD算法收敛了:
接下来,我们将线性回归曲线与训练数据拟合情况绘制成图。为达到此目的,我们定义了一个辅助函数用来绘制训练样本的散点图,同时绘制出相应的回归曲线:
至此,我们使用lin_regplot函数绘制房间数与房屋价格之间的关系图:
正如下图所示,线性回归曲线反映出了一般趋势,随着房间数量的增加,房价呈增长趋势:
上述结论是基于直觉观察得到的,但是数据也同样告诉我们,房间数在很多情况下并不能很好地解释房价。本章后续内容将讨论如何量化回归模型的性能。有趣的是,我们观察到一条奇怪的直线y=3,这意味着房价被限定了上界。在某些应用中,给出变量在原始取值区间上的预测值也是非常重要的。为了将预测价格缩放到以1000美元为价格单位的坐标轴上,我们使用了StandardScaler的inverse_transform方法:
上述代码中,我们使用了之前训练好的线性回归模型来预测带有5个房间的房屋价格。根据我们模型的预测,此房屋价值10840美元。
值得一提的是:对于经过标准化处理的变量,我们无需更新其截距的权重,因为它们在y轴上的截距始终为0。我们可以通过输出其权重来快速确认这一点: