线性回归、岭回归、LASSO回归与弹性网络回归

还是那句话,只会调用函数是没有办法做统计的,研究理论才是最重要的。

Running regression in Python and R doesn’t take more than 3-4 lines of code. All you need to do is, pass the variables, run the script and get the predicted values. And congratulations! You’ve run your first machine learning algorithm.

在Analytics vidhya社区发现一篇关于线性回归模型很详细的介绍,我根据自己的理解来整理一下内容要点。

原文链接:A comprehensive beginners guide for Linear, Ridge and Lasso Regression in Python and R

1.先来说最简单的一般线性回归,它的数学模型如下:

其中Y表示因变量,Xn表示n个自变量,θn表示n个系数。

线性回归的最终目的,是将模型预测值和真实值之间的差距降到最低,也就是求差值平方和(MSE)的最小值:


在实际计算中一般用损失函数(cost function)代替MSE:

2.求解损失函数最小值的方法一般有两种:最小二乘法和梯度下降,这篇博文只简单提了一下梯度下降,这里我把最小二乘法也列举一下:

推导过程就不详细展开了,总之最小二乘法可以得到计算最佳系数矩阵的标准方程:

而梯度下降则是对每一个自变量逐个求偏导,寻找损失函数下降最快的方法,这种方法在自变量较多的时候比最小二乘法更有效率。

3.评价一个线性模型优劣的标准,总结下来主要有3个指标,第一是损失函数的值,也就是误差平方和MSE,MSE越小,模型的拟合度越好,但也不是绝对的,MSE过小可能是过拟合的结果。第二是方差解释率(R-square),这个指标和PCA、PLS中的累积贡献率很相似,都是代表模型对原有数据方差的解释程度,也就是看有多少原有的方差在模型中得以体现,R-square的计算方法如下:

R-square越接近1,表示模型的拟合度越好。第三是模型对于测试数据集的预测准确率,这个没什么好说的,任何统计模型都以这个标准来判断好坏。

值得一提的是,在线性回归中,一般来说,纳入模型的自变量越多,对于数据的拟合程度就会越好。但是自变量增多会造成模型的复杂度升高,过拟合的风险就会增加,因此R-square提供了针对自变量个数的校正值:


其中R2代表原始的R-square值,p代表自变量的个数,N代表样本数。

4.线性回归模型对于数据的其中一个要求是自变量的总体方差要一致,否则就是存在异方差性(heteroskedasticity),假设X和Y的图像是这样的:

散点图整体看起来想一个漏斗(funnel),就提示数据的方差不齐,这种数据呈现的就是非线性关系,一般线性回归是无法拟合的,此时就要用多项式回归,这篇就先略过了。异方差性可以用white test来检测。关于回归分析必须满足的假设前提,之后再单独总结。

5.有必要梳理一下偏向性(bias)和方差(variance)的区别

上图已经解释地非常清楚了,简单来说偏向性就是偏离实际目标的程度,方差是数据内部的离散程度。那么在实际应用中如何平衡bias和variance?,看下图:

从上图可以看出,随着模型复杂度的加深,偏向性是逐渐降低的,而方差是逐渐升高的,因此在某个复杂度之下,两者会同时到达最小值,此时模型的总体误差total error也是最小的。但是,这个时候也是过拟合风险最高的时候,理想情况是我们在保持偏向性很低的情况下,让数据的方差得到一定程度的保持。要达到这一目的,要么主动降低模型的复杂度,也就是根据经验舍弃一些自变量,要么就要考虑正则化(Regularization)

6.岭回归(Ridge regression)和LASSO回归就是正则化的产物。它们都是通过在损失函数中增加一个惩罚项来降低过拟合风险,并且降低自变量间的多重共线性带来的信息冗余。

岭回归的损失函数如下:

LASSO回归的损失函数如下:

可以看到岭回归的惩罚项是θ的平方和,LASSO的惩罚项是θ的绝对值和。进行岭回归和LASSO回归分析的关键是找出合适的λ超参数,主要方法就是设定一个范围然后穷举,根据损失函数的值判断最佳的λ值。

关于岭回归和LASSO的选择,首先考虑的是自变量的个数,假设我们有一个数据集有10000个自变量,如果使用岭回归,最后得到的模型会非常复杂(10000个X),且系数都很小(接近0)。如果使用LASSO回归,它会根据自变量之间的共线性,舍弃其中一些自变量(将其系数变成0),这样可以降低复杂度,但是会损失一部分信息,导致模型准确率下降。那么如何取得平衡呢?,此时可以试试弹性网络回归(Elastic Net Regression)。

弹性网络回归的损失函数就是岭回归和LASSO的组合:

弹性网络回归的方法是先将有共线性的自变量分成一组,如果其中有一个自变量与因变量有强相关关系,那么就将这一组所有自变量都输入线性模型。

7.上述岭回归和LASSO都是不同正则化形式下的线性回归,正则化的一般形式如下:

当p=1的时候,就是LASSO,p=2的时候就是岭回归。

你可能感兴趣的:(线性回归、岭回归、LASSO回归与弹性网络回归)