线性回归场景
-
根据 𝐘=𝐗𝜃 得到输出向量𝐘和输入特征𝐗之间的线性关系,求出线性回归系数𝜃。
其中𝐘的维度为mx1,𝐗的维度为mxn,而𝜃的维度为nx1。m代表样本个数,n代表样本特征的维度。 -
定义一个损失函数,一个极小化损失函数的优化方法,以及一个验证算法的方法。损失函数的不同,损失函数的优化方法的不同,验证方法的不同,就形成了不同的线性回归算法。
1.LinearRegression
-
损失函数: J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J(θ)=21(Xθ−Y)T(Xθ−Y)
-
优化方法:最小二乘法 θ = ( X T X ) − 1 X T Y \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} θ=(XTX)−1XTY
-
验证方法:
无,需要我们自己把数据集分成训练集和测试集,然后训练优化。 -
使用场景:
一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们的首先。
2.Ridge
-
损失函数: J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) + 1 2 α ∣ ∣ θ ∣ ∣ 2 2 J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2 J(θ)=21(Xθ−Y)T(Xθ−Y)+21α∣∣θ∣∣22
-
优化方法:最小二乘法 θ = ( X T X + α E ) − 1 X T Y \mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY} θ=(XTX+αE)−1XTY
其中E为单位矩阵。 -
验证方法:
无,需要我们自己把数据集分成训练集和测试集,设置好超参数𝛼。然后训练优化。
3.RidgeCV
-
验证方法:
RidgeCV类对超参数𝛼使用交叉验证来选择一个合适的𝛼。在初始化RidgeCV类时候,传一组备选的𝛼值,10个,100个都可以,RidgeCV类会选择一个合适的𝛼。 -
使用场景:
觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,用RidgeCV来跑Ridge回归。但如果输入特征的维度很高,而且是稀疏线性关系的话,RidgeCV类就不合适了。
4.Lasso
-
损失函数: J ( θ ) = 1 2 m ( X θ − Y ) T ( X θ − Y ) + α ∣ ∣ θ ∣ ∣ 1 J(\mathbf\theta) = \frac{1}{2m}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1 J(θ)=2m1(Xθ−Y)T(Xθ−Y)+α∣∣θ∣∣1
-
优化方法:
Lasso类采用的是坐标轴下降法,后面讲到的LassoLars类采用的是最小角回归法 -
验证方法:
无,需要自己设置好超参数𝛼,然后训练优化。
5.LassoCV
- 验证方法:
LassoCV类对超参数𝛼使用交叉验证,来选择一个合适的𝛼。在初始化LassoCV类时候,可以传一组备选的𝛼值,10个,100个都可以,LassoCV类会选择一个合适的𝛼。 - 使用场景:
对于高维的特征数据,尤其线性关系是稀疏的(绝大多数的特征和样本输出没有关系),或者是要在一堆特征里面找出主要的特征。用LassoCV类来跑Lasso回归。
6.LassoLars
- 优化方法:
LassoLars类采用的是最小角回归法,前面讲到的Lasso类采用的是坐标轴下降法。
7.LassoLarsCV
- 验证方法:
LassoLarsCV类对超参数𝛼使用交叉验证,来选择一个合适的𝛼。在初始化LassoLarsCV类时候,可以传一组备选的𝛼值,10个,100个都可以,LassoLarsCV类会选择一个合适的𝛼。 - 使用场景:
场景一:如果我们想探索超参数𝛼更多的相关值的话,由于最小角回归可以看到回归路径,此时用LassoLarsCV比较好。
场景二: 如果我们的样本数远小于样本特征数的话,用LassoLarsCV也比LassoCV好。
其余场景最好用LassoCV。
8.LassoLarsIC
- 验证方法:
不需要指定备选的𝛼值,由LassoLarsIC类基于 Akaike信息准则(AIC)和贝叶斯信息准则(BIC)自己选择。LassoLarsIC类可以一轮找到超参数𝛼,而用K折交叉验证需要K+1轮才能找到。相比之下LassoLarsIC类寻找𝛼更快。 - 使用场景:
由于使用了AIC和BIC准则,数据必须满足一定的条件才能用LassoLarsIC类。这样的准则需要对解的自由度做一个适当的估计。该估计是来自大样本(渐近结果),并假设该模型是正确的(即这些数据确实是由假设的模型产生的)。
当待求解的问题的条件很差的时候(比如特征个数大于样本数量的时候),这些准则就会有崩溃的风险。所以除非知道数据是来自一个模型确定的大样本,才能用LassoLarsIC。而实际上得到的数据大部分都不能满足这个要求。
9.ElasticNet
-
损失函数: J ( θ ) = 1 2 m ( X θ − Y ) T ( X θ − Y ) + α ρ ∣ ∣ θ ∣ ∣ 1 + α ( 1 − ρ ) 2 ∣ ∣ θ ∣ ∣ 2 2 J(\mathbf\theta) = \frac{1}{2m}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha\rho||\theta||_1 + \frac{\alpha(1-\rho)}{2}||\theta||_2^2 J(θ)=2m1(Xθ−Y)T(Xθ−Y)+αρ∣∣θ∣∣1+2α(1−ρ)∣∣θ∣∣22
其中𝛼为正则化超参数,𝜌为范数权重超参数。 -
优化方法:
ElasticNet回归损失函数的优化方法常用的有两种,坐标轴下降法和最小角回归法。ElasticNet类采用的是坐标轴下降法。 -
验证方法:
无。需要自己设置好超参数𝛼和𝜌,然后训练优化。
10.ElasticNetCV
- 验证方法:
ElasticNetCV类对超参数𝛼和 𝜌使用交叉验证,来选择合适的𝛼和𝜌。在初始化ElasticNetCV类时候,传入一组备选的𝛼值和𝜌,10个,100个都可以。ElasticNetCV类会选择一个合适的𝛼和𝜌。 - ElasticNetCV类用在发现Lasso回归太过(太多特征被稀疏为0),而用Ridge回归正则化又不够(回归系数衰减的太慢)的时候。一般不推荐直接上ElasticNetCV。
11.OrthogonalMatchingPursuit(OMP)
-
损失函数:
OMP算法和普通的线性回归损失函数的区别是增加了一个限制项,来限制回归系数中非0元素的最大个数 (𝜃 的L0范数)。 J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J(θ)=21(Xθ−Y)T(Xθ−Y)s u b j e c t t o ∣ ∣ θ ∣ ∣ 0 ≤ n n o n − z e r o − c o e f s subject\;to \;||\theta||_0 \leq n_{non-zero-coefs} subjectto∣∣θ∣∣0≤nnon−zero−coefs
-
优化方法:
使用前向选择算法来优化损失函数。最小角回归算法的缩水版,虽然精度不如最小角回归算法,但运算速度很快。 -
验证方法:
无。需要自己选择限制参数𝑛𝑛𝑜𝑛−𝑧𝑒𝑟𝑜−𝑐𝑜𝑒𝑓𝑠,然后训练优化。
12.OrthogonalMatchingPursuitCV
-
验证方法:
使用交叉验证,在S折交叉验证中以MSE最小为标准来选择最好的𝑛𝑛𝑜𝑛−𝑧𝑒𝑟𝑜−𝑐𝑜𝑒𝑓𝑠。 -
使用场景:
通常用在稀疏回归系数的特征选择上,不过由于它的损失函数优化方法是前向选择算法,精确度较低,一般情况不是特别推荐用,用LassoCV就够,除非你对稀疏回归系数的精确个数很在意,那可以考虑用OrthogonalMatchingPursuitCV。
13.MultiTaskLasso
- 指多个线性回归模型共享样本特征,但是有不同的回归系数和特征输出。
- 具体的线性回归模型是𝐘=𝐗𝐖。其中X是mxn维度的矩阵。W为nxk维度的矩阵,Y为mxk维度的矩阵。m为样本个数,n为样本特征,而k就代表多个回归模型的个数。
- 所谓的“MultiTask”这里其实就是指k个线性回归的模型一起去拟合。
- 损失函数:
J
(
W
)
=
1
2
m
(
∣
∣
X
W
−
Y
∣
∣
)
F
r
o
2
+
α
∣
∣
W
∣
∣
21
J(\mathbf{W}) = \frac{1}{2m}\mathbf{(||XW-Y||)_{Fro}^2} + \alpha||\mathbf{W}||_{21}
J(W)=2m1(∣∣XW−Y∣∣)Fro2+α∣∣W∣∣21
其中, (||𝐗𝐖−𝐘||)𝐅𝐫𝐨是𝐘=𝐗𝐖的Frobenius范数,||𝐖||21代表W各列的根平方和之和。 - 优化方法:
MultiTaskLasso类使用坐标轴下降法来优化损失函数。 - 验证方法:
无。需要自己设置好超参数𝛼,然后训练优化。
14.MultiTaskLassoCV
-
验证方法:
MultiTaskLassoCV类会根据传入备选的𝛼值帮我们选择一个合适的𝛼。 -
使用场景:
MultiTaskLassoCV是多个回归模型需要一起共享样本特征一起拟合时候的首选。
15.MultiTaskElasticNet
- 损失函数:
J ( W ) = 1 2 m ( ∣ ∣ X W − Y ∣ ∣ ) F r o 2 + α ρ ∣ ∣ W ∣ ∣ 21 + α ( 1 − ρ ) 2 ( ∣ ∣ W ∣ ∣ ) F r o 2 J(\mathbf{W}) = \frac{1}{2m}\mathbf{(||XW-Y||)_{Fro}^2} + \alpha\rho||\mathbf{W}||_{21} + \frac{\alpha(1-\rho)}{2}\mathbf{(||W||)_{Fro}^2} J(W)=2m1(∣∣XW−Y∣∣)Fro2+αρ∣∣W∣∣21+2α(1−ρ)(∣∣W∣∣)Fro2
其中, (||𝐗𝐖−𝐘||)𝐅𝐫𝐨是𝐘=𝐗𝐖的Frobenius范数,||𝐖||21代表W各列的根平方和之和。 - 优化方法:
MultiTaskElasticNet类使用坐标轴下降法来优化损失函数。 - 验证方法:
无。需要自己设置好超参数𝛼,然后训练优化。
16.MultiTaskElasticNetCV
- 验证方法:
MultiTaskLassoCV类会根据传入备选的𝛼值和 𝜌帮我们选择一个合适的𝛼和 𝜌。 - 使用场景:
多个回归模型需要一起共享样本特征一起拟合时候的两个备选之一,首选是MultiTaskLassoCV。如果发现用MultiTaskLassoCV时回归系数衰减的太快,那么可以考虑用MultiTaskElasticNetCV。
17.BayesianRidge
-
贝叶斯回归模型假设先验概率,似然函数和后验概率都是正态分布。先验概率是假设模型输出Y是符合均值为𝑋𝜃的正态分布,正则化参数𝛼被看作是一个需要从数据中估计得到的随机变量。回归系数𝜃的先验分布规律为球形正态分布,超参数为𝜆。我们需要通过最大化边际似然函数来估计超参数𝛼和𝜆,以及回归系数𝜃。
-
使用场景:
如果数据有很多缺失或者矛盾的病态数据,可以考虑BayesianRidge类,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。但是极大化似然函数的推断过程比较耗时,一般情况不推荐使用。
18.ARDRegression
-
ARDRegression和BayesianRidge唯一的区别在于对回归系数𝜃的先验分布假设。
BayesianRidge假设𝜃的先验分布规律为球形正态分布
而ARDRegression丢掉了BayesianRidge中的球形高斯的假设,采用与坐标轴平行的椭圆形高斯分布。
这样对应的超参数𝜆有n个维度,各不相同。而BayesianRidge中球形分布的𝜃对应的𝜆只有一个。
ARDRegression也是通过最大化边际似然函数来估计超参数𝛼和𝜆向量,以及回归系数𝜃。
- 使用场景:
如果数据有很多缺失或者矛盾的病态数据,发现BayesianRidge类拟合不好,可以换ARDRegression试一试。因为ARDRegression对回归系数先验分布的假设没有BayesianRidge严格,某些时候会比BayesianRidge产生更好的后验结果。