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