原标题:Python 机器学习算法实践:岭回归和LASSO
新媒体管家
前言
继续线性回归的总结, 本文主要介绍两种线性回归的缩减(shrinkage)方法的基础知识: 岭回归(Ridge Regression)和LASSO(Least Absolute Shrinkage and Selection Operator)并对其进行了Python实现。同时也对一种更为简单的向前逐步回归计算回归系数的方法进行了相应的实现。
正文
通过上一篇《机器学习算法实践-标准与局部加权线性回归》中标准线性回归的公式w=(X^T*X)^(-1)X^T*y中可以看出在计算回归系数的时候我们需要计算矩阵X^TX的逆,但是如果该矩阵是个奇异矩阵,则无法对其进行求解。那么什么情况下该矩阵会有奇异性呢?
X本身存在线性相关关系(多重共线性), 即非满秩矩阵。如果数据的特征中存在两个相关的变量,即使并不是完全线性相关,但是也会造成矩阵求逆的时候造成求解不稳定。
当数据特征比数据量还要多的时候, 即m
对于上面的两种情况,我们需要对最初的标准线性回归做一定的变化使原先无法求逆的矩阵变得非奇异,使得问题可以稳定求解。我们可以通过缩减的方式来处理这些问题例如岭回归和LASSO.
中心化和标准化
这里先介绍下数据的中心化和标准化,在回归问题和一些机器学习算法中通常要对原始数据进行中心化和标准化处理,也就是需要将数据的均值调整到0,标准差调整为1, 计算过程很简单就是将所有数据减去平均值后再除以标准差:
这样调整后的均值:
调整后的标准差:
之所以需要进行中心化其实就是个平移过程,将所有数据的中心平移到原点。而标准化则是使得所有数据的不同特征都有相同的尺度Scale, 这样在使用梯度下降法以及其他方法优化的时候不同特征参数的影响程度就会一致了。
如下图所示,可以看出得到的标准化数据在每个维度上的尺度是一致的(图片来自网络,侵删)
岭回归(Ridge Regression)
标准最小二乘法优化问题:
也可以通过矩阵表示:
得到的回归系数为:
这个问题解存在且唯一的条件就是XX列满秩:rank(X)=dim(X).
即使X列满秩,但是当数据特征中存在共线性,即相关性比较大的时候,会使得标准最小二乘求解不稳定, XTX的行列式接近零,计算XTX的时候误差会很大。这个时候我们需要在cost f