从验证方法可以看出,验证\(\alpha\)LassoLarsIC比LassoLarsCV快很多。那么是不是LassoLarsIC类一定比LassoLarsCV类好呢? 不一定!由于使用了AIC和BIC准则,我们的数据必须满足一定的条件才能用LassoLarsIC类。这样的准则需要对解的自由度做一个适当的估计。该估计是来自大样本(渐近结果),并假设该模型是正确的(即这些数据确实是由假设的模型产生的)。当待求解的问题的条件数很差的时候(比如特征个数大于样本数量的时候),这些准则就会有崩溃的风险。所以除非我们知道数据是来自一个模型确定的大样本,并且样本数量够大,我们才能用LassoLarsIC。而实际上我们得到的数据大部分都不能满足这个要求,实际应用中我没有用到过这个看上去很美的类。
9. ElasticNet损失函数:
ElasticNet可以看做Lasso和Ridge的中庸化的产物。它也是对普通的线性回归做了正则化,但是它的损失函数既不全是L1的正则化,也不全是L2的正则化,而是用一个权重参数\(\rho\)来平衡L1和L2正则化的比重,形成了一个全新的损失函数如下:
\(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\)
其中\(\alpha\)为正则化超参数,\(\rho\)为范数权重超参数。
损失函数的优化方法:
ElasticNet回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。ElasticNet类采用的是坐标轴下降法。
验证方法:
ElasticNet类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数\(\alpha\)和\(\rho\)。然后训练优化。
使用场景:
ElasticNet类需要自己对\(\alpha\)和\(\rho\)调优,所以不是ElasticNet回归的首选,一般用到的是下一节要讲的ElasticNetCV类。
10. ElasticNetCVElasticNetCV类的损失函数和损失函数的优化方法完全与ElasticNet类相同,区别在于验证方法。
验证方法:
ElasticNetCV类对超参数\(\alpha\)和 \(\rho\)使用了交叉验证,来帮忙我们选择合适的\(\alpha\)和\(\rho\)。在初始化ElasticNetCV类时候,我们可以传一组备选的\(\alpha\)值和\(\rho\),10个,100个都可以。ElasticNetCV类会帮我们选择一个合适的\(\alpha\)和\(\rho\)。免去了我们自己去一轮轮筛选\(\alpha\)和\(\rho\)的苦恼。
使用场景:
ElasticNetCV类用在我们发现用Lasso回归太过(太多特征被稀疏为0),而用Ridge回归又正则化的不够(回归系数衰减的太慢)的时候。一般不推荐拿到数据就直接就上ElasticNetCV。
11. OrthogonalMatchingPursuit损失函数:
OrthogonalMatchingPursuit(OMP)算法和普通的线性回归损失函数的区别是增加了一个限制项,来限制回归系数中非0元素的最大个数。形成了一个全新的损失函数如下:
\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) \)
subject to \(||\theta||_0 \leq n_{non-zero-coefs}\) ,其中\((||\theta||_0\)代表\(\theta\)的L0范数,即非0回归系数的个数。
损失函数的优化方法:
OrthogonalMatchingPursuit类使用前向选择算法来优化损失函数。它是最小角回归算法的缩水版。虽然精度不如最小角回归算法,但是运算速度很快。
验证方法:
OrthogonalMatchingPursuit类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己选择限制参数\(n_{non-zero-coefs}\)。然后训练优化。
使用场景:
OrthogonalMatchingPursuit类需要自己选择\(n_{non-zero-coefs}\),所以不是OrthogonalMatchingPursuit回归的首选,一般用到的是下一节要讲的OrthogonalMatchingPursuitCV类,不过如果你已经定好了\(n_{non-zero-coefs}\)的值,那用OrthogonalMatchingPursuit比较方便。
12. OrthogonalMatchingPursuitCVOrthogonalMatchingPursuitCV类的损失函数和损失函数的优化方法完全与OrthogonalMatchingPursuit类相同,区别在于验证方法。
验证方法:
OrthogonalMatchingPursuitCV类使用交叉验证,在S折交叉验证中以MSE最小为标准来选择最好的\(n_{non-zero-coefs}\)。
使用场景: