线性回归的L1正则化通常称为Lasso回归,它和Ridge回归的区别是在损失函数上增加了的是L1正则化的项,而不是L2正则化项。L1正则化的项也有一个常数系数\(\alpha\)来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:
\(J(\mathbf\theta) = \frac{1}{2m}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1\)
其中n为样本个数,\(\alpha\)为常数系数,需要进行调优。\(||\theta||_1\)为L1范数。
Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。
损失函数的优化方法:
Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法,后面讲到的LassoLars类采用的是最小角回归法
验证方法:
Lasso类并没有用到交叉验证之类的验证方法,和Ridge类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数\(\alpha\)。然后训练优化。
使用场景:
一般来说,对于高维的特征数据,尤其线性关系是稀疏的,我们会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。但是Lasso类需要自己对\(\alpha\)调优,所以不是Lasso回归的首选,一般用到的是下一节要讲的LassoCV类。
5. LassoCVLassoCV类的损失函数和损失函数的优化方法完全与Lasso类相同,区别在于验证方法。
验证方法:
LassoCV类对超参数\(\alpha\)使用了交叉验证,来帮忙我们选择一个合适的\(\alpha\)。在初始化LassoCV类时候,我们可以传一组备选的\(\alpha\)值,10个,100个都可以。LassoCV类会帮我们选择一个合适的\(\alpha\)。免去了我们自己去一轮轮筛选\(\alpha\)的苦恼。
使用场景:
LassoCV类是进行Lasso回归的首选。当我们面临在一堆高位特征中找出主要特征时,LassoCV类更是必选。当面对稀疏线性关系时,LassoCV也很好用。
6. LassoLarsLassoLars类的损失函数和验证方法与Lasso类相同,区别在于损失函数的优化方法。
损失函数的优化方法:
Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。LassoLars类采用的是最小角回归法,前面讲到的Lasso类采用的是坐标轴下降法。
使用场景:
LassoLars类需要自己对\(\alpha\)调优,所以不是Lasso回归的首选,一般用到的是下一节要讲的LassoLarsCV类。
7. LassoLarsCVLassoLarsCV类的损失函数和损失函数的优化方法完全与LassoLars类相同,区别在于验证方法。
验证方法:
LassoLarsCV类对超参数\(\alpha\)使用了交叉验证,来帮忙我们选择一个合适的\(\alpha\)。在初始化LassoLarsCV类时候,我们可以传一组备选的\(\alpha\)值,10个,100个都可以。LassoLarsCV类会帮我们选择一个合适的\(\alpha\)。免去了我们自己去一轮轮筛选\(\alpha\)的苦恼。
使用场景:
LassoLarsCV类是进行Lasso回归的第二选择。第一选择是前面讲到LassoCV类。那么LassoLarsCV类有没有适用的场景呢?换句话说,用最小角回归法什么时候比坐标轴下降法好呢?场景一:如果我们想探索超参数\(\alpha\)更多的相关值的话,由于最小角回归可以看到回归路径,此时用LassoLarsCV比较好。场景二: 如果我们的样本数远小于样本特征数的话,用LassoLarsCV也比LassoCV好。其余场景最好用LassoCV。
8. LassoLarsICLassoLarsIC类的损失函数和损失函数的优化方法完全与LassoLarsCV类相同,区别在于验证方法。
验证方法:
LassoLarsIC类对超参数\(\alpha\)没有使用交叉验证,而是用 Akaike信息准则(AIC)和贝叶斯信息准则(BIC)。此时我们并不需要指定备选的\(\alpha\)值,而是由LassoLarsIC类基于AIC和BIC自己选择。用LassoLarsIC类我们可以一轮找到超参数\(\alpha\),而用K折交叉验证的话,我们需要K+1轮才能找到。相比之下LassoLarsIC类寻找\(\alpha\)更快。
使用场景: