4.3.2 岭回归的参数调节
岭回归是在模型的简单性(使系数趋近于零)和它在训练集上的性能之间取得平衡的一种模型。用户可以使用alpha参数控制模型更加简单性还是在训练集上的性能更高。在上一个示例中,我们使用默认参数alpha = 1。
注意 alpha的取值并没有一定之规。alpha的最佳设置取决于我们使用的特定数据集。增加alpha值会降低特征变量的系数,使其趋于零,从而降低在训练集的性能,但更有助于泛化。
下面我们再看一个例子,仍然使用糖尿病数据集,但是把正则项参数alpha设置为10,在jupyter notebook中输入如下代码:
按下shift+回车键,得到结果如图4-12所示。
图4-12 alpha值等于10时模型的得分
【结果分析】提高了alpha值之后,我们看到模型的得分大幅降低了,然而有意思的是,模型在测试集的得分超过了在训练集的得分。这说明,如果我们的模型出现了过拟合的现象,那么我们可以提高alpha值来降低过拟合的程度。
同时,降低alpha值会让系数的限制变得不那么严格,如果我们用一个非常小的alpha值,那么系统的限制几乎可以忽略不计,得到的结果也会非常接近线性回归。比如下面这个例子:
在jupyter notebook中输入:
代码运行的结果如图4-13所示。
图4-13 alpha值等于0.1时的模型得分
【结果分析】现在我们看到,把参数alpha设置为0.1似乎让模型的在训练集的得分比线性回归模型略低,但在测试集的得分却有轻微的提升。我们还可以尝试不断降低alpha值来进一步改善模型的泛化表现。现在需要记住alpha值是如何影响模型的复杂性的。在后面的章节我们还会具体讨论设置参数的方法。
为了更清晰地看出alpha值对于模型的影响,我们用图像来观察不同alpha值对应的模型的coef_属性。较高的alpha值代表模型的限制更加严格,所以我们认为在较高的alpha值下,coef_属性的数值会更小,反之coef_属性的数值更大。下面用jupyter notebook把图形画出来。
在jupyter notebook中输入代码:
按下shift+回车键运行代码,jupyter notebook会绘制一张图像如图4-14所示。
图4-14 不同alpha值对应岭回归的参数大小及线性回归参数对比
【结果分析】在图4-14中,横轴代表的是coef_属性:x = 0显示第一个特征变量的系数,x = 1显示的是第二个特征变量的系数,依此类推,直到x = 10。纵轴显示特征变量的系数量级。从图中我们不难看出,当alpha = 10时,特征变量系数大多在0附近;而当alpha = 1时,岭模型的特征变量系数普遍增大了。而当alpha = 0.1时,特征变量的系数就更大了,甚至大部分与线性回归的点重合了,而线性回归模型由于没有经过任何正则化处理,其所对应的特征变量系数值就会非常大,其中有一些都快跑到图表之外了。
还有一个能够帮助我们更好理解正则化对模型影响的方法,那就是取一个固定的alpha值,然后改变训练数据集的数据量。比如我们在糖尿病数据集中采样,然后用这些采样的子集对线性回归模型和alpha值等于1的岭回归模型进行评估,并用jupyter notebook进行绘图,得到一个随数据集大小而不断改变的模型评分折线图,其中的折线我们也称之为学习曲线(learning curves)。下面我们来初步画一下两个模型在糖尿病数据集中的学习曲线,输入代码如下:
运行代码,会得到如图4-15所示的结果。
图4-15 糖尿病数据集中岭回归与线性回归的学习曲线
【结果分析】毫无疑问,不论是在岭回归中还是在线性回归中,训练数据集的得分都比测试数据集的得分要高。而由于岭回归是经过正则化的模型,因此它在整个图像中训练数据集的得分要比线性回归的得分低。然而,岭回归在测试数据集的得分与训练数据集的得分差异就要小一些,尤其是在数据子集比较小的情况下。在数据量小于50条的情况下,线性回归几乎不能让机器学到任何东西。随着数据集的规模越来越大,两个模型的表现也越来越好,最后线性回归的得分赶上了岭回归的得分。不难看出,如果有足够多的数据,那么正则化就显得不是那么重要了,岭回归和线性回归的表现也相差无几。
注意 读者可能会发现,随着数据量的增加,线性回归在训练数据集的得分是下降的,这说明随着数据增加,线性回归模型就越不容易产生过拟合的现象,或者说越难记住这些数据。