skiti-learn线性回归算法库

线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系,求出线性回归系数θ,也就是 Y=Xθ。其中Y的维度为mx1,X的维度为mxn,而θ的维度为nx1

  1. LinearRegression
    最常见的普通线性回归,损失函数如下:
    J(θ)=1/2 (Xθ−Y)T (Xθ−Y)
    此损失函数一般采用梯度下降法或者最小二乘法优化
    skiti的LinearRegression类中采用的是最小二乘法:
    θ=(XT X)−1 XT Y

  2. Ridge
    岭回归是在普通线性回归的基础上加上了L2正则化:
    J(θ)=1/2 (Xθ−Y)T (Xθ−Y)+1/2 α||θ||²2
    Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,不至于过拟合。
    此损失函数一般采用梯度下降法或者最小二乘法优化
    skiti的Ridge类中采用的是最小二乘法:
     θ=(XT X+αE)−1 XT Y
    一般来说,只要我们觉得数据有线性关系,用LinearRegression类拟合的不是特别好,需要正则化,可以考虑用Ridge类。不过需要自己制定一个超参数,自己评估超参数的好坏,比较麻烦,RidgeCV类可以解决这一问题。

  3. RidgeCV
    RidgeCV类对超参数α使用了交叉验证,来帮忙我们选择一个合适的α。在初始化RidgeCV类时候,我们可以传一组备选的α值,10个,100个都可以。RidgeCV类会帮我们选择一个合适的α。免去了我们自己去一轮轮筛选α的苦恼。

  4. Lasso
    Lasso使用了L1正则化,用系数α来调节损失函数的均方差项和正则化项的权重,损失函数如下:
    J(θ)=1/2m (Xθ−Y)T (Xθ−Y)+α||θ||1
    Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。
    Lasso回归的优化方式一般为坐标轴下降法和最小角回归法。Lasso采用的是坐标轴下降法。
    一般来说,对于高维的特征数据,尤其线性关系是稀疏的,我们会采用Lasso回归。或者是要在一堆特征里面找出主要的特征,那么Lasso回归更是首选了。但是Lasso类需要自己对α调优,所以一般用到的是LassoCV类。

  5. LassoCV
    LassoCV对超参数使用交叉验证,帮助我们选择一个合适的超参数。

  6. LassoLars
    与Lasso基本相同,区别在于损失的优化方法。LassoLars类采用的是最小角回归法。

  7. LassoLarsCV
    同样方便LassoLars进行超参数选择,使用交叉验证。
    针对坐标轴下降法和最小角回归法的选择:
    一:如果我们想探索超参数α更多的相关值的话,由于最小角回归可以看到回归路径,此时用LassoLarsCV比较好。二: 如果我们的样本数远小于样本特征数的话,用LassoLarsCV也比LassoCV好。其余场景最好用LassoCV。

  8. LassoLarsIC
    损失函数与优化方法与LassoLars相同,区别在于验证方法。
    LassoLarIC类采用的是而是用 Akaike信息准则(AIC)和贝叶斯信息准则(BIC)。此时我们并不需要指定备选的α值,而是由LassoLarsIC类基于AIC和BIC自己选择。用LassoLarsIC类我们可以一轮找到超参数α,而用K折交叉验证的话,我们需要K+1轮才能找到。相比之下LassoLarsIC类寻找α更快。
    不过使用LassoLarIC数据必须满足一定条件,需要对解的自由度做一个适当的估计。该估计是来自大样本(渐近结果),并假设该模型是正确的(即这些数据确实是由假设的模型产生的)。当待求解的问题的条件数很差的时候(比如特征个数大于样本数量的时候),这些准则就会有崩溃的风险。所以除非我们知道数据是来自一个模型确定的大样本,并且样本数量够大,我们才能用LassoLarsIC。而实际上我们得到的数据大部分都不能满足这个要求。

  9. ElasticNet
    ElasticNet是Ridge和Lasso的一个中和,做了一个既有L1也含有L2的正则化,通过ρ来平衡L1和L2的比重,损失函数如下:
    J(θ)=1/2m (Xθ−Y)T (Xθ−Y)+αρ||θ||1 +α(1−ρ)/2 ||θ||²2
    由于存在L1正则化无法求导,所以优化方式还是坐标轴下降法和最小角回归法两种。ElasticNet采用的是坐标轴下降法

  10. ElasticNetCV
    ElasticNetCV对两个超参数使用了交叉验证。方便选择超参数
    ElasticNetCV类用在我们发现用Lasso回归太过(太多特征被稀疏为0),而用Ridge回归又正则化的不够(回归系数衰减的太慢)的时候。一般不推荐拿到数据就直接就上ElasticNetCV。

    扫描二维码关注公众号,回复: 3593195 查看本文章
  11. OrthogonalMatchingPursuit
    OrthogonalMatchingPursuit(OMP)算法和普通的线性回归损失函数的区别是增加了一个限制项,来限制回归系数中非0元素的最大个数。
    J(θ)=1/2 (Xθ−Y)T (Xθ−Y)
    subject to ||θ||0≤n(non−zero−coefs)
    其中(||θ||0代表θ的L0范数,即非0回归系数的个数。)
    OrthogonalMatchingPursuit类使用前向选择算法来优化损失函数。它是最小角回归算法的缩水版。虽然精度不如最小角回归算法,但是运算速度很快。
    和之前的算法类似,OMP需要选择n(non−zero−coefs)的值。

  12. OrthogonalMatchingPursuitCV
    同样的,此方法使用交叉验证,在S折交叉验证中以MSE最小为标准来选择最好的n(non−zero−coefs)
    OrthogonalMatchingPursuitCV类通常用在稀疏回归系数的特征选择上,这点和LassoCV有类似的地方。不过由于它的损失函数优化方法是前向选择算法,精确度较低,一般情况不是特别推荐用,用LassoCV就够,除非你对稀疏回归系数的精确个数很在意,那可以考虑用OrthogonalMatchingPursuitCV。

  13. MultiTaskLasso
    针对具体的线性回归模型是Y=XW。其中X是mxn维度的矩阵。W为nxk维度的矩阵,Y为mxk维度的矩阵。m为样本个数,n为样本特征,而k就代表多个回归模型的个数。所谓的“MultiTask”这里其实就是指k个线性回归的模型一起去拟合。
    J(W)=1/2m (||XW−Y||)²Fro + α||W||21
    其中, (||XW−Y||)Fro是Y=XW的***Frobenius***范数。而||W||21代表W的各列的根平方和之和。
    MultiTaskLasso采用坐标轴下降法。

  14. MultiTaskLassoCV
    MultiTaskLassoCV类对超参数α使用了交叉验证,来帮忙选择一个合适的α。
    MultiTaskLassoCV是多个回归模型需要一起共享样本特征一起拟合时候的首选。它可以保证选到的特征每个模型都用到。不会出现某个模型选到了某特征而另一个模型没选到这个特征的情况。

  15. MulitTaskElasticNet
    MultiTaskElasticNet类和MultiTaskLasso类的模型是相同的。不过损失函数不同。损失函数表达式如下:
    J(W)=1/2m (||XW−Y||)²Fro+αρ||W||21+α(1−ρ)/2(||W||)²Fro
    其中, (||XW−Y||)Fro是Y=XW的Frobenius范数。而||W||21代表W的各列的根平方和之和。
    采用坐标轴下降法进行优化

  16. MultiTaskElasticNetCV
    MultiTaskElasticNetCV类对超参数α和 ρ使用了交叉验证,来帮忙选择合适的α和ρ。
    MultiTaskElasticNetCV是多个回归模型需要一起共享样本特征一起拟合时候的两个备选之一,首选是MultiTaskLassoCV。如果我们发现用MultiTaskLassoCV时回归系数衰减的太快,那么可以考虑用MultiTaskElasticNetCV。

  17. BayesianRidge
    贝叶斯回归模型,贝叶斯回归模型假设先验概率,似然函数和后验概率都是正态分布。先验概率是假设模型输出Y是符合均值为Xθ的正态分布,正则化参数α被看作是一个需要从数据中估计得到的随机变量。回归系数θ的先验分布规律为球形正态分布,超参数为λ。我们需要通过最大化边际似然函数来估计超参数α和λ,以及回归系数θ。
    如果我们的数据有很多缺失或者矛盾的病态数据,可以考虑BayesianRidge类,它对病态数据鲁棒性很高,也不用交叉验证选择超参数。但是极大化似然函数的推断过程比较耗时,一般情况不推荐使用。

  18. ARDRegression
    ARDRegression和BayesianRidge很像,唯一的区别在于对回归系数θ的先验分布假设。BayesianRidge假设θ的先验分布规律为球形正态分布,而ARDRegression丢掉了BayesianRidge中的球形高斯的假设,采用与坐标轴平行的椭圆形高斯分布。这样对应的超参数λ有n个维度,各不相同。而上面的BayesianRidge中球形分布的θ对应的λ只有一个。
    ARDRegression也是通过最大化边际似然函数来估计超参数α和λ向量,以及回归系数θ。
    如果我们的数据有很多缺失或者矛盾的病态数据,可以考虑BayesianRidge类,如果发现拟合不好,可以换ARDRegression试一试。因为ARDRegression对回归系数先验分布的假设没有BayesianRidge严格,某些时候会比BayesianRidge产生更好的后验结果。

猜你喜欢

转载自blog.csdn.net/weixin_40732844/article/details/82773608