当前位置: 首页>编程语言>正文

sklearn线性回归查看模型 scikit-learn 线性回归


文章目录

  • Reference
  • Abstract
  • 前言
  • 线性回归算法
  • 1. LinearRegression
  • 2. Ridge回归类家族
  • 2.1 Ridge
  • 2.2 RidgeCV
  • 3. Lasso回归类家族
  • 3.1 Lasso
  • 3.2 LassoCV
  • 3.3 LassoLars
  • 3.4 LassoLarsCV
  • 3.5 LassoLarsIC
  • 4. ElasticNet回归类家族
  • 4.1 ElasticNet
  • 4.2 ElasticNetCV
  • 5. OrthogonalMatchingPursuit回归类家族
  • 5.1 OrthogonalMatchingPursuit
  • 5.2 OrthogonalMatchingPursuitCV
  • 6. MultiTaskLasso回归类家族
  • 6.1 MultiTaskLasso
  • 6.2 MultiTaskLassoCV
  • 6.3 MultiTaskElasticNet
  • 6.4 MultiTaskElasticNetCV
  • 7. 贝叶斯回归模型
  • 7.1 BayesianRidge
  • 7.2 ARDRegression
  • 备注
  • 1. 自己的学习进展


Reference

scikit-learn 线性回归算法库小结

机器学习之线性回归 Linear Regression(三)scikit-learn算法库

Abstract

        对scikit-learn中线性回归算法进行总结,分析各自的不同和使用场景。

前言

        线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系,求出线性回归系数θ,也就是 Y=Xθ。其中Y的维度为mx1,X的维度为mxn,而θ的维度为nx1。m代表样本个数,n代表样本特征的维度。
        为了得到线性回归系数θ,我们需要定义一个损失函数、一个极小化损失函数的优化方法、以及一个验证算法的方法。损失函数的不同、损失函数的优化方法的不同、验证方法的不同,就形成了不同的线性回归算法。scikit-learn中的线性回归算法库可以从这三点找出各自的不同点。理解了这些不同点,对不同的算法使用场景也就好理解了。

线性回归算法

1. LinearRegression

        LinearRegression类就是我们平时说的最常见普通的线性回归。
(1) 损失函数:
        损失函数是最简单的,如下:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归,第1张
(2) 损失函数的优化方法:
        对于上述损失函数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_02,第2张,一般有梯度下降法和最小二乘法两种优化方法,scikit-learn中的LinearRegression类采用最小二乘法。通过最小二乘法,可以解出线性回归系数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_03,第3张为:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_04,第4张
(3) 验证方法:
        LinearRegression类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,然后训练优化。
(4) 使用场景:
        一般来说,只要觉得数据有线性关系,LinearRegression类是我们的首选。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。

2. Ridge回归类家族

2.1 Ridge

(1) 损失函数:
        LinearRegression没有考虑过拟合的问题,有可能泛化能力较差,这时损失函数可以加入正则化项,如果加入的是L2范数的正则化项,这就是Ridge回归。损失函数如下:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_05,第5张
       其中sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张为常数系数,需要进行调优。sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_07,第7张为L2范数。
       Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,不至于过拟合。
(2) 损失函数的优化方法:
       对于上述损失函数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_02,第2张一般有梯度下降法和最小二乘法两种优化方法,scikit-learn中的Ridge类采用最小二乘法。通过最小二乘法,可以解出线性回归系数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_03,第3张为:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_10,第10张
        其中sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_11,第11张为单位矩阵。
(3) 验证方法:
        Ridge类并没有用到交叉验证之类的验证方法,需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,然后训练优化。
(4) 使用场景:
        一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合得不是特别好、需要正则化,可以考虑用Ridge类。这个类最大的缺点是每次要自己指定一个超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,然后自己评估sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张的好坏,比较麻烦,一般都用下一节讲到的RidgeCV类来跑Ridge回归,不推荐直接用这个Ridge类,除非你只是为了学习Ridge回归。

2.2 RidgeCV

        RidgeCV类的损失函数、损失函数优化方法与Ridge类完全相同,区别在于验证方法。
(3) 验证方法:
        RidgeCV类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张使用了交叉验证,来帮助我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张。在初始化RidgeCV类时候,我们可以传一组备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张值,10个、100个都可以。RidgeCV类会帮我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,免去了我们自己去一轮轮筛选sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张的苦恼。
(4) 使用场景:
        一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合得不是特别好、需要正则化,可以考虑用RidgeCV类,不是为了学习的话就不用Ridge类。为什么这里只是考虑用RidgeCV类呢?因为线性回归正则化有很多的变种,Ridge只是其中的一种,所以可能需要比选。如果输入特征的维度很高,而且是稀疏线性关系的话,RidgeCV类就不合适了,这时应该主要考虑下面几节要讲到的Lasso回归类家族。

3. Lasso回归类家族

3.1 Lasso

(1) 损失函数:
        线性回归的L1正则化通常称为Lasso回归,它和Ridge回归的区别在于损失函数上增加的是L1正则化项,而不是L2正则化项。L1正则化项也有一个常数系数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_21,第21张
        其中sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_22,第22张为样本个数,sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张为常数系数,需要进行调优。sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_24,第24张为L1范数。
        Lasso回归可以使得一些特征的系数变小,甚至还使一些绝对值较小的系数直接变为0,增强模型的泛化能力。
(2) 损失函数的优化方法:
        Lasso回归的损失函数优化方法常用的有两种,坐标轴下降法和最小角回归法。Lasso类采用的是坐标轴下降法,后面讲到的LassoLars类采用的是最小角回归法。
(3) 验证方法:
        Lasso类并没有用到交叉验证之类的验证方法,和Ridge类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,然后训练优化。
(4) 使用场景:
        一般来说,对于高维的特征数据,尤其线性关系是稀疏的,会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。但是Lasso类需要自己对sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张调优,所以不是Lasso回归的首选,一般用到的是下一节要讲的LassoCV类。

3.2 LassoCV

        LassoCV类的损失函数、损失函数优化方法与Lasso类完全相同,区别在于验证方法。
(3) 验证方法:
        LassoCV类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张使用了交叉验证,来帮忙我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张。在初始化LassoCV类时候,我们可以传一组备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张值,10个、100个都可以。LassoCV类会帮我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,免去了我们自己去一轮轮筛选sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张的苦恼。
(4) 使用场景:
        LassoCV类是进行Lasso回归的首选。当我们面临在一堆高维特征中找出主要特征时,LassoCV类更是必选。当面对稀疏线性关系时,LassoCV也很好用。

3.3 LassoLars

        LassoLars类的损失函数、验证方法与Lasso类相同,区别在于损失函数优化方法。
(2) 损失函数的优化方法:
        Lasso回归的损失函数优化方法常用的有两种:坐标轴下降法和最小角回归法。LassoLars类采用的是最小角回归法,前面讲到的Lasso类采用的是坐标轴下降法。
(4) 使用场景:
        LassoLars类需要自己对sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张调优,所以不是Lasso回归的首选,一般用到的是下一节要讲的LassoLarsCV类。

3.4 LassoLarsCV

        LassoLarsCV类的损失函数、损失函数优化方法与LassoLars类完全相同,区别在于验证方法。
(3) 验证方法:
        LassoLarsCV类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张使用了交叉验证,来帮忙我们选择一个合适的α。在初始化LassoLarsCV类时候,我们可以传一组备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张值,10个、100个都可以。LassoLarsCV类会帮我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,免去了我们自己去一轮轮筛选sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张的苦恼。
(4) 使用场景:
        LassoLarsCV类是进行Lasso回归的第二选择。第一选择是前面讲到LassoCV类。那么LassoLarsCV类有没有适用的场景呢?换句话说,用最小角回归法什么时候比坐标轴下降法好呢?场景一:如果我们想探索超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张更多的相关值的话,由于最小角回归可以看到回归路径,此时用LassoLarsCV比较好。场景二: 如果我们的样本数远小于样本特征数的话,用LassoLarsCV也比LassoCV好。其余场景最好用LassoCV。

3.5 LassoLarsIC

        LassoLarsIC类的损失函数、损失函数优化方法与LassoLarsCV类完全相同,区别在于验证方法。
(3) 验证方法:
        LassoLarsIC类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张没有使用交叉验证,而是用 Akaike信息准则(AIC)和贝叶斯信息准则(BIC)。此时我们并不需要指定备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张值,而是由LassoLarsIC类基于AIC和BIC自己选择。用LassoLarsIC类可以一轮找到超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,而用K折交叉验证的话,需要K+1轮才能找到。相比之下LassoLarsIC类寻找sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张更快。
(4) 使用场景:
        从验证方法可以看出,验证sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张的话,LassoLarsIC比LassoLarsCV快很多。那么是不是LassoLarsIC类一定比LassoLarsCV类好呢? 不一定!由于使用了AIC和BIC准则,我们的数据必须满足一定的条件才能用LassoLarsIC类。这样的准则需要对解的自由度做一个适当的估计。该估计是来自大样本(渐近结果),并假设该模型是正确的(即这些数据确实是由假设的模型产生的)。当待求解的问题的条件数很差的时候(比如特征个数大于样本数量的时候),这些准则就会有崩溃的风险。所以除非我们知道数据是来自一个模型确定的大样本,并且样本数量够大,才能用LassoLarsIC。而实际上我们得到的数据大部分都不能满足这个要求,实际应用中我没有用到过这个看上去很美的类。

4. ElasticNet回归类家族

4.1 ElasticNet

(1) 损失函数:
        ElasticNet可以看做Lasso和Ridge的中庸化的产物。它也是对普通的线性回归做了正则化,但是它的损失函数既不全是L1的正则化,也不全是L2的正则化,而是用一个权重参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张来平衡L1和L2正则化的比重,形成了一个全新的损失函数如下:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_44,第44张
        其中sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张为正则化超参数,sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张为范数权重超参数。
(2) 损失函数的优化方法:
        ElasticNet回归的损失函数优化方法常用的有两种:坐标轴下降法和最小角回归法。ElasticNet类采用的是坐标轴下降法。
(3) 验证方法:
        ElasticNet类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张,然后训练优化。
(4) 使用场景:
        ElasticNet类需要自己对sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张调优,所以不是ElasticNet回归的首选,一般用到的是下一节要讲的ElasticNetCV类。

4.2 ElasticNetCV

        ElasticNetCV类的损失函数、损失函数优化方法与ElasticNet类完全相同,区别在于验证方法。
(3) 验证方法:
        ElasticNetCV类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张使用了交叉验证,来帮忙我们选择合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张。在初始化ElasticNetCV类时候,我们可以传一组备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张,10个、100个都可以。ElasticNetCV类会帮我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张,免去了我们自己去一轮轮筛选sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张的苦恼。
(4) 使用场景:
        ElasticNetCV类用在我们发现用Lasso回归太过(太多特征被稀疏为0),而用Ridge回归又正则化的不够(回归系数衰减的太慢)的时候。一般不推荐拿到数据就直接就上ElasticNetCV。

5. OrthogonalMatchingPursuit回归类家族

5.1 OrthogonalMatchingPursuit

(1) 损失函数:
        OrthogonalMatchingPursuit(OMP)算法和普通的线性回归损失函数的区别是增加了一个限制项,来限制回归系数中非0元素的最大个数。形成了一个全新的损失函数如下:sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_61,第61张
        其中(sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_62,第62张代表sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_63,第63张的L0范数,即非0回归系数的个数。
(2) 损失函数的优化方法:
        OrthogonalMatchingPursuit类使用前向选择算法来优化损失函数。它是最小角回归算法的缩水版,虽然精度不如最小角回归算法,但是运算速度很快。
(3) 验证方法:
        OrthogonalMatchingPursuit类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己选择限制参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_64,第64张,然后训练优化。
(4) 使用场景:
        OrthogonalMatchingPursuit类需要自己选择sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_64,第64张,所以不是OrthogonalMatchingPursuit回归的首选,一般用到的是下一节要讲的OrthogonalMatchingPursuitCV类,不过如果已经定好了sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_64,第64张的值,那使用OrthogonalMatchingPursuit比较方便。

5.2 OrthogonalMatchingPursuitCV

        OrthogonalMatchingPursuitCV类的损失函数、损失函数优化方法与OrthogonalMatchingPursuit类完全相同,区别在于验证方法。
(3) 验证方法:
        OrthogonalMatchingPursuitCV类使用交叉验证,在S折交叉验证中以MSE最小为标准来选择最好的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_64,第64张
(4) 使用场景:
        OrthogonalMatchingPursuitCV类通常用在稀疏回归系数的特征选择上,这点和LassoCV有类似的地方。不过由于它的损失函数优化方法是前向选择算法,精确度较低,一般情况不是特别推荐用,用LassoCV就够,除非你对稀疏回归系数的精确个数很在意,那可以考虑用OrthogonalMatchingPursuitCV。

6. MultiTaskLasso回归类家族

6.1 MultiTaskLasso

sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_68,第68张。其中sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_69,第69张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_70,第70张维度的矩阵。sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_71,第71张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_72,第72张维度的矩阵,sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_73,第73张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_74,第74张维度的矩阵。sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_75,第75张为样本个数,sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_22,第22张为样本特征,而sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_77,第77张就代表多个回归模型的个数。所谓的MultiTask其实就是指sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_77,第77张个线性回归的模型一起去拟合。
(1) 损失函数:
        由于这里是多个线性回归一起拟合,所以损失函数和前面的都很不一样:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_sklearn线性回归查看模型_79,第79张
        其中,sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_80,第80张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_68,第68张的Frobenius范数。而sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_82,第82张代表sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_71,第71张的各列的根平方和之和。
(2) 损失函数的优化方法:
        MultiTaskLasso类使用坐标轴下降法来优化损失函数。
(3) 验证方法:
        MultiTaskLasso类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张,然后训练优化。
(4) 使用场景:
        MultiTaskLasso类需要自己对sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张调优,所以不是共享特征协同回归的首选,一般用到的是下一节要讲的MultiTaskLassoCV类。

6.2 MultiTaskLassoCV

        MultiTaskLassoCV类的损失函数、损失函数优化方法与MultiTaskLasso类完全相同,区别在于验证方法。
(3) 验证方法:
        MultiTaskLassoCV类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张使用了交叉验证,来帮忙我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张。在初始化LassoLarsCV类时候,我们可以传一组备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张值,10个、100个都可以。MultiTaskLassoCV类会帮我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张
(4) 使用场景:
        MultiTaskLassoCV是多个回归模型需要一起共享样本特征一起拟合时候的首选。它可以保证选到的特征每个模型都用到,不会出现某个模型选到了某特征而另一个模型没选到这个特征的情况。

6.3 MultiTaskElasticNet

(1) 损失函数:
        MultiTaskElasticNet类和MultiTaskLasso类的模型是相同的,不过损失函数不同,损失函数表达式如下:
sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_90,第90张
        其中,sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_91,第91张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_68,第68张的Frobenius范数。而sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_82,第82张代表W的各列的根平方和之和。
(2) 损失函数的优化方法:
        MultiTaskElasticNet类使用坐标轴下降法来优化损失函数。
(3) 验证方法:
        MultiTaskElasticNet类并没有用到交叉验证之类的验证方法,和Lasso类类似。需要我们自己把数据集分成训练集和测试集,需要自己设置好超参数α和ρ,然后训练优化。 
(4) 使用场景:
        MultiTaskElasticNet类需要自己对sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张调优,所以不是共享特征协同回归的首选,如果需要用MultiTaskElasticNet,一般用到的是下一节要讲的MultiTaskElasticNetCV类。

6.4 MultiTaskElasticNetCV

        MultiTaskElasticNetCV类的损失函数、损失函数优化方法与MultiTaskElasticNet类完全相同,区别在于验证方法。
(3) 验证方法:
        MultiTaskElasticNetCV类对超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张使用了交叉验证,来帮忙我们选择合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张。在初始化MultiTaskElasticNetCV类时候,我们可以传一组备选的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张,10个、100个都可以。ElasticNetCV类会帮我们选择一个合适的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张,免去了我们自己去一轮轮筛选sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_43,第43张的苦恼。
(4) 使用场景:
        MultiTaskElasticNetCV是多个回归模型需要一起共享样本特征一起拟合时候的两个备选之一,首选是MultiTaskLassoCV。如果我们发现用MultiTaskLassoCV时回归系数衰减的太快,那么可以考虑用MultiTaskElasticNetCV。

7. 贝叶斯回归模型

7.1 BayesianRidge

sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_73,第73张是符合均值为sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_Lasso_106,第106张的正态分布,正则化参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张被看作是一个需要从数据中估计得到的随机变量。回归系数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_63,第63张的先验分布规律为球形正态分布,超参数为sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_109,第109张。我们需要通过最大化边际似然函数来估计超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_109,第109张,以及回归系数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_63,第63张
        此处对损失函数即负的最大化边际似然函数不多讨论,不过其形式和Ridge回归的损失函数很像,所以也取名BayesianRidge。
(4) 使用场景:
        如果我们的数据有很多缺失或者矛盾的病态数据,可以考虑BayesianRidge类,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。但是极大化似然函数的推断过程比较耗时,一般情况不推荐使用。

7.2 ARDRegression

sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_63,第63张的先验分布假设。BayesianRidge假设θ的先验分布规律为球形正态分布,而ARDRegression丢掉了BayesianRidge中的球形高斯的假设,采用与坐标轴平行的椭圆形高斯分布。这样对应的超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_109,第109张有n个维度,各不相同。而上面的BayesianRidge中球形分布的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_63,第63张对应的sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_109,第109张只有一个。
        ARDRegression也是通过最大化边际似然函数来估计超参数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_scikit-learn_06,第6张sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_损失函数_109,第109张向量,以及回归系数sklearn线性回归查看模型 scikit-learn 线性回归,sklearn线性回归查看模型 scikit-learn 线性回归_线性回归_63,第63张
(4) 使用场景:
        如果我们的数据有很多缺失或者矛盾的病态数据,可以考虑BayesianRidge类,如果发现拟合不好,可以换ARDRegression试一试。因为ARDRegression对回归系数先验分布的假设没有BayesianRidge严格,某些时候会比BayesianRidge产生更好的后验结果。


https://www.xamrdz.com/lan/5r51941959.html

相关文章: