线性回归家族一览

线性回归的目的是要得到输出向量 Y 和输入特征 X 之间的线性关系,求出线性回归系数 \(\theta\),也就是 \(Y = X\theta\)。其中 Y 的维度是 m 1,X 的维度是 m n,而 \(\theta\) 的维度为 n * 1。m 代表样本个数,n 代表样本特征的维度。

为了得到线性回归系数 \(\theta\),我们需要定义一个损失函数,一个极小化损失函数的优化方法,以及一个验证算法的方法。损失函数的不同,损失函数的优化方法的不同,验证方法的不同,就形成了不同的线性回归算法。

LinearRegression

损失函数:

LinearRegression类就是我们平时说的最常见普通的线性回归,它的损失函数也是最简单的,如下:

$$J(\theta) = \frac{1}{2}(X\theta - Y)^{T}(X\theta - Y)$$

损失函数的优化方法:

对于这个函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法。通过最小二乘法,可以解出线性回归系数 \(\theta\) 为:

$$\theta = (X^TX)^{-1}X^{T}Y$$

使用场景

一般来说,只要我们觉得数据有线性关系,LinearRegression 是我们的首先应该采用的。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。

Ridge Regression

由于单纯的线性回归没有考虑过拟合的问题,有可能泛化能力较差,这时损失函数可以加入正则化项,如果加入的是 L2 范数的正则化项,就是 Ridge 回归。此时,损失函数如下:

$$J(\theta) = \frac{1}{2}(X\theta - Y)^{T}(X\theta - Y) + \frac{1}{2}\alpha ||\theta||^2_2$$

其中 \(\alpha\) 为常数系数,需要进行调优。

Ridge 回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,不至于过拟合。

损失函数的优化方法

一般也用最小二乘法或者梯度下降法来优化。通过最小二乘法,可以解得系数:

$$\theta = (X^TX + \alpha E)^{-1}X^TY$$

使用场景:

一般来说,只要我们觉得数据有线性关系,用 LinearRegression 拟合的不是特别好,需要正则化,可以考虑用 Ridge Regression。但是这个类最大的缺点是每次我们要自己指定一个超参数 \(\alpha\),然后自己评估 \(\alpha\) 的好坏,比较麻烦。

RidgeCV

RidgeCV 的损失函数和损失函数的优化方法完全与 Ridge 类相同,区别在于验证方法。

RidgeCV 对超参数 \(\alpha\) 使用了交叉验证,来帮忙我们选择一个合适的 \(\alpha\)。在初始化 RidgeCV 时候,我们可以传一组备选的 \(\alpha\) 值,10个,100个都可以。RidgeCV类会帮我们选择一个合适的αα。免去了我们自己去一轮轮筛选αα的苦恼。  

使用场景

一般来说,只要我们觉得数据有线性关系,用 LinearRegression 拟合的不是特别好,需要正则化,可以考虑用 RidgeCV。如果输入特征的维度很高,而且是稀疏线性关系的话,RidgeCV类就不合适了。这时应该主要考虑下面要讲到的 Lasso 回归类家族。

Lasso Regression

线性回归的 L1 正则化通常称为 Lasso 回归,它和 Ridge 回归的区别是在损失函数上增加了的是 L1 正则化的项,而不是 L2 正则化项。L1 正则化的项也有一个常数系数 \(\alpha\) 来调节损失函数的均方差项和正则化项的权重,具体 Lasso 回归的损失函数表达式如下:

$$J(\theta) = \frac{1}{2m}(X\theta - Y)^{T}(X\theta - Y) + \alpha||\theta||_1$$

Lasso 回归可以使得一些特征的系数变小,甚至还是一些绝对值比较小的系数直接变为 0。增强模型的泛化能力。

ElasticNet

ElasticNet 可以看做 Lasso 和 Ridge 的结合。它也是对普通的线性回归做了正则化,但是它的损失函数记不全是 L1 的正则化,也不全是 L2 的正则化,而是一个权重 \(\rho\) 来平衡 L1 和 L2 正则化的比重,形成了一个全新的损失函数如下:

$$J(\theta) = \frac{1}{2m}(X\theta - Y)^{T}(X\theta - Y) + \alpha \rho||\theta||_1 + \frac{\alpha(1 - \rho)}{2}||\theta||^2_2$$

使用场景

ElasticNet 用在我们发现用 Lasso 回归太过(太多特征被稀疏为0),而用Ridge回归又正则化的不够(回归系数衰减的太慢)的时候。一般不推荐拿到数据就直接就 ElasticNet。

BayesianRidge

贝叶斯回归模型假设先验概率,似然函数和后验概率都是正态分布。先验概率是假设模型输出 Y 是符合均值为 \(X\theta\) 的正态分布,正则化参数 \(X\alpha\) 被看作是一个需要从数据中估计得到的随机变量。回归系数 \(\theta\) 的先验分布规律为球形正态分布,超参数为 λ。我们需要通过最大化边际似然函数来估计超参数 α 和 λ,以及回归系数 \(\theta\)。

使用场景:

如果我们的数据有很多缺失或者矛盾的病态数据,可以考虑 BayesianRidge,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。但是极大化似然函数的推断过程比较耗时,一般情况不推荐使用。