机器学习:线性模型-多重共线性问题的解决-岭回归

在线性模型之中,除了线性回归之外,最知名的就是岭回归与Lasso了。这两个算法非常神秘,他们的原理和应用都不像其他算法那样高调,学习资料料也很少。这可能是因为这两个算法不是为了提升模型表现,而是为了修复漏洞而设计的(实际上,使用岭回归或者Lasso,模型的效果往往会下降一些,因为删除了一小部分信息),因此在结果为上的机器学习领域颇有些被冷落的意味。本文介绍一下岭回归。
岭回归,又称为吉洪诺夫正则化(Tikhonov regularization)。通常来说,大部分的机器学习教材会使用代数的形式来展现岭回归的原理,这个原理和线性回归非常相似,都是将求解的过程转化为一个带条件的最优化问题,然后用最小二乘法求解。然而,岭回归可以做到的事其实可以用矩阵非常简单地表达出来。
岭回归在多元线性回归的损失函数上加上了正则项,表达为系数的L2范式(即系数的平方项)乘以正则化系数 α \alpha α。其他教材中的代数推导,正则化系数会写作 λ \lambda λ,用以和Lasso区别,不过在sklearn中由于是两个不同的算法,因此正则项系数都使用 α \alpha α。岭回归的损失函数的完整表达式写作:
m i n ω ∣ ∣ X ω − y ∣ ∣ 2   2 + α ∣ ∣ ω ∣ ∣ 2   2 \large\boldsymbol{\mathop{min}\limits_\omega||X\omega-y||_2\,^2+\alpha||\omega||_2\,^2} ωminXωy22+αω22
这个操作看起来简单,其实带来了巨大的变化。在线性回归中,通过在损失函数上对 ω \omega ω求导来求解极值,这里虽然加上了正则项,依然使用最小二乘法来求解。假设特征矩阵结构为(m,n),系数 ω \omega ω的结构是(1,n),则可以有:
∂ ( R S S + α ∣ ∣ ω ∣ ∣ 2   2 ) ∂ ω = ∂ ( ∣ ∣ y − X ω ∣ ∣ 2   2 + α ∣ ∣ ω ∣ ∣ 2   2 ) ∂ ω \large\boldsymbol{\frac{\partial(RSS+\alpha||\omega||_2\,^2)}{\partial{\omega}}=\frac{\partial(||y-X\omega||_2\,^2+\alpha||\omega||_2\,^2)}{\partial{\omega}}} ω(RSS+αω22)=ω(yXω22+αω22)
= ∂ ( y − X ω ) T ( y − X ω ) ∂ ω + ∂ α ∣ ∣ ω ∣ ∣ 2   2 ∂ ω \qquad\large\boldsymbol{=\frac{\partial{(y-X\omega)^T(y-X\omega)}}{\partial{\omega}}+\frac{\partial\alpha||\omega||_2\,^2}{\partial{\omega}}} =ω(yXω)T(yXω)+ωαω22
前半部分在本博客的博文《用最小二乘法求解多元线性回归的参数》中推导过,后半部分对 ω \omega ω求导:
= 0 − 2 X T y + 2 X T X ω + 2 α ω \large\boldsymbol{=0-2X^Ty+2X^TX\omega+2\alpha\omega} =02XTy+2XTXω+2αω
将含有 ω \omega ω的项合并,其中, α \alpha α为常数
为实现矩阵相加,让它乘以一个结构为 n ∗ n n*n nn的单位矩阵 I I I
= ( X T X + α I ) ω − X T y \large\boldsymbol{=(X^TX+\alpha{I})\omega-X^Ty} =(XTX+αI)ωXTy
( X T X + α I ) ω = X T y \large\boldsymbol{(X^TX+\alpha{I})\omega=X^Ty} (XTX+αI)ω=XTy
则,只要 ( X T X + α I ) (X^TX+\alpha{I}) (XTX+αI)存在逆矩阵,就可以求出 ω \omega ω。一个矩阵存在逆矩阵的充分必要条件是:这个矩阵的行列式不为0。假设原本的特征矩阵中存在共线性,则方阵 X T X X^TX XTX就会不满秩(存在全为零的行):
此时方阵 X T X X^TX XTX没有逆,最小二乘法无法使用。然而,加上 α I \alpha{I} αI之后,矩阵就不一样了:
机器学习:线性模型-多重共线性问题的解决-岭回归_第1张图片
最后得到的这个行列式还是一个梯形行列式,然而已经不存在全0行或全0列,除非:
(1) α \alpha α等于0,或者
(2) 矩阵 X T X X^TX XTX中存在对角线上元素为 − α -\alpha α,其他元素都为0的行或列
否则矩阵永远都是满秩。在sklearn中, α \alpha α的值可以自由控制,可以让它不为0,以避免第一种情况。而第二种情况,如果发现某个 α \alpha α的取值下模型无法求解,只需要换一个 α \alpha α的取值就可以。也就是说,矩阵的逆是永远存在的。有了这个保障, ω \omega ω就可以写作:
ω = ( X T X + α I ) − 1 X T y \large\boldsymbol{\omega=(X^TX+\alpha{I})^{-1}X^Ty} ω=(XTX+αI)1XTy
如此,正则化系数就非常爽快地避免了”精确相关关系“带来的影响,至少最小二乘法在存在的情况下是一定可以使用的。对于存在”高度相关关系“的矩阵,也可以通过调 α \alpha α大,让矩阵 X T X + α I X^TX+\alpha{I} XTX+αI的行列式变大,从而让逆矩阵变小,以此控制参数向量 ω \omega ω的偏移。 α \alpha α越大,模型越不容易受共线性影响。
( X T X + α I ) − 1 = 1 ∣ X T X + α I ∣ ( X T X + α I ) ∗ \large\boldsymbol{(X^TX+\alpha{I})^{-1}=\frac1{|X^TX+\alpha{I}|}(X^TX+\alpha{I})^*} (XTX+αI)1=XTX+αI1(XTX+αI)
如此,多重共线性就被控制住了:最小二乘法一定有解,并且这个解可以通过来 α \alpha α进行调节,以确保不会偏离太多。当然, α \alpha α挤占了 ω \omega ω中由原始的特征矩阵贡献的空间,因此如果 α \alpha α太大,也会导致 ω \omega ω的估计出现较大的偏移,无法正确拟合数据的真实面貌。所以,使用中需要找出让模型效果变好的最佳 α \alpha α值。

你可能感兴趣的:(机器学习,算法,统计)