1.算法
1.1从最简单的普通线性回归谈起
Q:已知一维特征空间中的一系列样本点{(xi, yi), i = 1,2,3...n},注意这里是一维特征空间,虽然可以在二维平面上画出来,在学习机器学习的时候,一定要跳脱出笛卡尔空间坐标系的束缚。我们希望找到一个一次函数y=ax来描述这一组样本点的模型,如何求a呢?
推广到k维特征空间就是{(Xi, yi), i = 1,2,3...n, Xi = (xi1, xi2...xik)},我们希望找到一个函数y = XW,其中W就是我们要求的系数阵。
一个常用的方法就是找出使误差最小的W。这里的误差是指预测Y值和真实Y值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我 们采用平方误差。
平方误差可以写做:
该公式非常重要,是普通线性回归的损失函数,对W求导,当导数为零时,平方误差最小,此时W等于:
这两个公式都非常好理解,直接将我们已知的X和y代入求解即可
但思考这样一个问题:如果数据的特征比样本点还多应该怎么办?输入数据的矩阵X不是满秩矩阵。非满秩矩阵在求逆时会出现问题,即()不可逆时,或者趋近于0,会使得回归系数趋向于无穷大,此时得到的回归系数是无意义的。解决这类问题可以使用岭回归和LASSO回归,主要针对自变量之间存在多重共线性或者自变量个数多于样本量的情况。
1.2 岭回归和lasso回归
这部分内容可以参考https://blog.csdn.net/weixin_43374551/article/details/83688913,讲的非常清楚。
概括来说,岭回归和lasso回归都是在线性回归的损失函数上加了一个正则化的惩罚项,只不过岭回归加的是L2范数(一个平方项),而lasso回归加的是L1范数(一个绝对值项)。
L2范数惩罚项的加入使得满秩,保证了可逆,但是也由于惩罚项的加入,使得待求解回归系数矩阵的估计不再是无偏估计。所以岭回归是以放弃无偏性、降低精度为代价解决病态矩阵问题的回归方法。也就是增加了偏差,来减小方差。
单位矩阵的对角线上全是1,像一条山岭一样,这也是岭回归名称的由来。
1.3 降维
岭回归不能降维,但lasso回归可以,具体也请参考上面那篇博文,里面有这样一个公式:
这可能不太好理解,我们可以从拉格朗日乘子的角度来理解,事实上我们还是求平方误差函数的最小值,只不过给待求解的加上了一个限制条件,由上面的不等式,根据拉格朗日乘子和KKT条件求解,岭回归的损失函数:
拉格朗日乘子与KKT条件如何理解请参考这个链接,看完之后关于这篇博文的知识都能理解了:https://www.zhihu.com/question/38586401
这个参数如何设定大小是非常重要的,通常我们是用网格法,如果是Python的话有自带的CV,通常的大小在0.01左右。
Lasso回归使得一些系数变小,甚至还是一些绝对值较小的系数直接变为0,因此特别适用于参数数目缩减与参数的选择,因而用来估计稀疏参数的线性模型。
但是Lasso回归有一个很大的问题,导致我们需要把它单独拎出来讲,就是它的损失函数不是连续可导的,由于L1范数用的是绝对值之和,导致损失函数有不可导的点。也就是说,我们的最小二乘法,梯度下降法,牛顿法与拟牛顿法对它统统失效了。此时我们可以通过坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression, LARS)来求有这个L1范数的损失函数极小值。
使用坐标轴下降法和最小角回归法进行求解的过程可以参考这个网址:https://www.cnblogs.com/pinard/p/6018889.html
1.4总结
1.普通线性回归的损失函数是什么?一般求解方法可以使用梯度下降法和最小二乘法
2.岭回归与lasso回归主要针对自变量之间存在多重共线性或者自变量个数多于样本量的情况。
3.岭回归不能降维,但lasso回归可以
4.lasso回归求解可以使用坐标轴下降法和最小角回归
2. 相关链接
拉格朗日乘子
https://www.zhihu.com/question/38586401
机器学习十大经典算法之岭回归和LASSO回归(学习笔记整理)
https://blog.csdn.net/weixin_43374551/article/details/83688913
线性回归、lasso回归、岭回归以及弹性网络的系统解释
坐标轴下降法和最小角回归法进行求解的过程可以参考这个网址:https://www.cnblogs.com/pinard/p/6018889.html