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