OrthogonalMatchingPursuitCV类通常用在稀疏回归系数的特征选择上,这点和LassoCV有类似的地方。不过由于它的损失函数优化方法是前向选择算法,精确度较低,一般情况不是特别推荐用,用LassoCV就够,除非你对稀疏回归系数的精确个数很在意,那可以考虑用OrthogonalMatchingPursuitCV。
13. MultiTaskLasso从这节到第16节,类里面都带有一个“MultiTask”的前缀。不过他不是编程里面的多线程,而是指多个线性回归模型共享样本特征,但是有不同的回归系数和特征输出。具体的线性回归模型是\(\mathbf{Y = XW}\)。其中X是mxn维度的矩阵。W为nxk维度的矩阵,Y为mxk维度的矩阵。m为样本个数,n为样本特征,而k就代表多个回归模型的个数。所谓的“MultiTask”这里其实就是指k个线性回归的模型一起去拟合。
损失函数:
由于这里是多个线性回归一起拟合,所以损失函数和前面的都很不一样:
\(J(\mathbf{W}) = \frac{1}{2m}\mathbf{(||XW-Y||)_{Fro}^2} + \alpha||\mathbf{W}||_{21}\)
其中, \(\mathbf{(||XW-Y||)_{Fro}}\)是\(\mathbf{Y = XW}\)的Frobenius范数。而\(\mathbf{||W||_{21}}\)代表W的各列的根平方和之和。
损失函数的优化方法:
MultiTaskLasso类使用坐标轴下降法来优化损失函数。
验证方法:
MultiTaskLasso类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数\(\alpha\)。然后训练优化。
使用场景:
MultiTaskLasso类需要自己对\(\alpha\)调优,所以不是共享特征协同回归的首选,一般用到的是下一节要讲的MultiTaskLassoCV类。
14. MultiTaskLassoCVMultiTaskLassoCV类的损失函数和损失函数的优化方法完全与MultiTaskLasso类相同,区别在于验证方法。
验证方法:
MultiTaskLassoCV类对超参数\(\alpha\)使用了交叉验证,来帮忙我们选择一个合适的\(\alpha\)。在初始化LassoLarsCV类时候,我们可以传一组备选的\(\alpha\)值,10个,100个都可以。MultiTaskLassoCV类会帮我们选择一个合适的\(\alpha\)。
使用场景:
MultiTaskLassoCV是多个回归模型需要一起共享样本特征一起拟合时候的首选。它可以保证选到的特征每个模型都用到。不会出现某个模型选到了某特征而另一个模型没选到这个特征的情况。
15. MultiTaskElasticNet损失函数:
MultiTaskElasticNet类和MultiTaskLasso类的模型是相同的。不过损失函数不同。损失函数表达式如下:
\(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}\)
其中, \(\mathbf{(||XW-Y||)_{Fro}}\)是\(\mathbf{Y = XW}\)的Frobenius范数。而\(\mathbf{||W||_{21}}\)代表W的各列的根平方和之和。
损失函数的优化方法:
MultiTaskElasticNet类使用坐标轴下降法来优化损失函数。
验证方法:
MultiTaskElasticNet类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数\(\alpha\)和\(\rho\)。然后训练优化。
使用场景:
MultiTaskElasticNet类需要自己对\(\alpha\)调优,所以不是共享特征协同回归的首选,如果需要用MultiTaskElasticNet,一般用到的是下一节要讲的MultiTaskElasticNetCV类。
16. MultiTaskElasticNetCV
MultiTaskElasticNetCV类的损失函数和损失函数的优化方法完全与MultiTaskElasticNet类相同,区别在于验证方法。
验证方法:
MultiTaskElasticNetCV类对超参数\(\alpha\)和 \(\rho\)使用了交叉验证,来帮忙我们选择合适的\(\alpha\)和\(\rho\)。在初始化MultiTaskElasticNetCV类时候,我们可以传一组备选的\(\alpha\)值和\(\rho\),10个,100个都可以。ElasticNetCV类会帮我们选择一个合适的\(\alpha\)和\(\rho\)。免去了我们自己去一轮轮筛选\(\alpha\)和\(\rho\)的苦恼。
使用场景: