线性回归

线性回归的目的是要得到输出向量Y和输入特征X之间的线性关系,求出线性回归系数θ,也就是Y=Xθ。其中Y的维度为mx1,X的维度为mxn,而θ的维度为nx1。m代表样本个数,n代表样本特征的维度。为了得到线性回归系数θ,我们需要定义一个损失函数,一个极小化损失函数的优化方法,以及一个验证算法的方法。损失函数的不同,损失函数的优化方法的不同,验证方法的不同,就形成了不同的线性回归算法。
scikit-learn对于线性回归提供了比较多的类库,这些类库都可以用来做线性回归分析,本文就对这些类库的使用做一个总结,重点讲述这些线性回归算法库的不同和各自的使用场景。

1.LinearRegression

  • LinearRegression类就是我们平时说的最常见普通的线性回归,它的损失函数也是最简单的,如下:
  • 对于这个损失函数,一般有梯度下降法和最小二乘法两种极小化损失函数的优化方法,而scikit中的LinearRegression类用的是最小二乘法。通过最小二乘法,可以解出线性回归系数θ为:

  • API: sklearn.linear_model.LinearRegression
    使用场景:一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们的首先。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。如果是学习线性回归,推荐先从这个类开始第一步的研究。但是使用最小二乘法进行损失函数优化,在数据集非常大的时候会造成大量的计算,运行时间将非常长。

2. SGDRegressor

  • 当数据集很大的时候,对于损失函数也有另外的处理方法使用梯度下降,沿着函数下降的方向,找到最低点,然后不断的更新w值。
  • API: sklearn.linear_model.SGDRegressor
  • 主要参数:
    alpha:表示学习率(通俗讲是梯度下降的快慢)
    SGDRegressor.coef_    ###返回w的权重
    

3.Ridge

  • 由于在前两个算法中没有考虑过拟合的问题,有可能泛化能力较差,这时损失函数可以加入正则化项,在scikit-learn的Ridge算法中,加入的是L2范数的正则化项,损失函数如下

    其中α为常数系数,需要进行调优。||θ||2为L2范数。
    Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,不至于过拟合。
  • API: sklearn.linear_model.Ridge
  • 主要参数:
    alpha:表示正则化力度,力度越大,权重越趋近于0
0条评论