机器学习求索之路(1)— 线性回归

机器学习求索之路(1)— 线性回归

@(Machine Learning)


1. 定义

  回归方法是为了对连续性的数据做出预测,其中最简单的方法当然就是线性回归。顾名思义,线性回归在假设特证满足线性关系,根据给定的训练数据来训练一个模型,用拟合出的线性方程对未知数据做出预测。线性回归的优点就是计算公式简单,计算结果容易理解,但是对非线性的数据拟合程度不够好。

2. 模型和损失函数

2.1. 基本形式

  对于 n n n维特征的样本数据,给定由 n n n个属性描述的示例 x = ( x 1 , x 2 , . . . , x n ) x=\left ( x_{1},x_{2},...,x_{n} \right ) x=(x1,x2,...,xn),其中 x i x_{i} xi x x x在第 i i i个属性上的取值,线性回归试图学得一个通过属性的线性组合来进行预测的函数,即
h θ ( x 1 , x 2 , . . . x n ) = θ 0 + θ 1 x 1 + . . . + θ n x n h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n} hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn
其中 θ i ( i = 0 , 1 , 2... n ) \theta_i (i = 0,1,2... n) θi(i=0,1,2...n)为模型参数, x i ( i = 0 , 1 , 2... n ) x_{i} (i = 0,1,2... n) xi(i=0,1,2...n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征 x 0 = 1 x_{0}=1 x0=1 ,这样 h θ ( x 0 , x 1 , . . . x n ) = ∑ i = 0 n θ i x i h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i} hθ(x0,x1,...xn)=i=0nθixi
  进一步用矩阵形式表达更加简洁如下:
h θ ( X ) = X θ h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta} hθ(X)=Xθ
其中, 假设函数 h θ ( X ) h_\mathbf{\theta}(\mathbf{X}) hθ(X) m ∗ 1 m * 1 m1的向量, θ {\theta} θ n ∗ 1 n * 1 n1的向量,里面有 n n n个代数法的模型参数。 X X X m ∗ n m * n mn维的矩阵。 m m m代表样本的个数, n n n代表样本的特征数。

2.2. 损失函数

  得到了上述模型,我们需要求出需要的损失函数,一般线性回归我们用均方误差作为损失函数。损失函数的代数法表示如下:
J ( θ 0 , θ 1 . . . , θ n ) = ∑ i = 0 m ( h θ ( x 0 , x 1 , . . . x n ) − y i ) 2 J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2 J(θ0,θ1...,θn)=i=0m(hθ(x0,x1,...xn)yi)2
进一步用矩阵形式表达损失函数:
J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J(θ)=21(XθY)T(XθY)
  由于矩阵法表达比较的简洁,后面将采用矩阵方式表达模型函数和损失函数。

3. 模型求解

  对于线性回归的损失函数 J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J(θ)=21(XθY)T(XθY),我们常用的有两种方法来求损失函数最小化时候的 θ \theta θ参数:一种是梯度下降法,一种是最小二乘法。而这两种方式又都分别有代数解法和矩阵解法,由于时间关系这里只给出矩阵解法,后续有时间再将代数解法补上。

3.1. 梯度下降法

  • 梯度下降的直观解释
      首先来看看梯度下降的一个直观的解释。比如我们在一座大山上的某处位置,由于我们不知道怎么下山,于是决定走一步算一步,也就是在每走到一个位置的时候,求解当前位置的梯度,沿着梯度的负方向,也就是当前最陡峭的位置向下走一步,然后继续求解当前位置梯度,向这一步所在位置沿着最陡峭最易下山的位置走一步。这样一步步的走下去,一直走到觉得我们已经到了山脚。当然这样走下去,有可能我们不能走到山脚,而是到了某一个局部的山峰低处。
      从上面的解释可以看出,梯度下降不一定能够找到全局的最优解,有可能是一个局部最优解。当然,如果损失函数是凸函数,梯度下降法得到的解就一定是全局最优解。
    @图1 梯度下降法图示
  • 梯度下降法的矩阵方式推导
  1. 先决条件: 需要确认优化模型的假设函数和损失函数。对于线性回归,假设函数 h θ ( x 1 , x 2 , . . . x n ) = θ 0 + θ 1 x 1 + . . . + θ n x n h_\theta(x_1, x_2, ...x_n) = \theta_0 +\theta_{1}x_1 + ... +\theta_{n}x_{n} hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn的矩阵表达方式为: h θ ( X ) = X θ h_\mathbf{\theta}(\mathbf{X}) =\mathbf{X\theta} hθ(X)=Xθ
    其中, 假设函数 h θ ( X ) h_\mathbf{\theta}(\mathbf{X}) hθ(X) m ∗ 1 m * 1 m1的向量, θ \mathbf{\theta} θ ( n + 1 ) ∗ 1 (n+1) * 1 (n+1)1的向量,里面有 n + 1 n+1 n+1个代数法的模型参数。 X \mathbf{X} X m ∗ ( n + 1 ) m * (n+1) m(n+1)维的矩阵。m代表样本的个数,n+1代表样本的特征数。
    损失函数的表达式为: J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} -\mathbf{Y})^T(\mathbf{X\theta} -\mathbf{Y}) J(θ)=21(XθY)T(XθY), 其中 Y \mathbf{Y} Y是样本的输出向量,维度为 m ∗ 1 m * 1 m1.
  2. 算法相关参数初始化: θ \theta θ向量的初始化,算法终止距离 ε \varepsilon ε,步长 α \alpha α。在没有任何先验知识的时候,一般将所有的θ初始化为0, 将步长初始化为1。
  3. 算法过程:
    1)确定当前位置的损失函数的梯度,对于 θ \theta θ向量,其梯度表达式如下:
         ∂ ∂ θ J ( θ ) \frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) θJ(θ)
    2)用步长乘以损失函数的梯度,得到当前位置下降的距离,即 α ∂ ∂ θ J ( θ ) \alpha\frac{\partial}{\partial\theta}J(\theta) αθJ(θ)对应于前面登山例子中的某一步。
    3)确定 θ \mathbf\theta θ向量里面的每个值,梯度下降的距离都小于 ε \varepsilon ε,如果小于 ε \varepsilon ε则算法终止,当前 θ \mathbf\theta θ向量即为最终结果。否则进入步骤4.
    4)更新 θ \theta θ向量,其更新表达式如下。更新完毕后继续转入步骤1.
         θ = θ − α ∂ ∂ θ J ( θ ) \mathbf\theta=\mathbf\theta -\alpha\frac{\partial}{\partial\theta}J(\mathbf\theta) θ=θαθJ(θ)
  • 线性回归的具体算法过程:
    损失函数对于 θ \theta θ向量的偏导数计算如下:
    ∂ ∂ θ J ( θ ) = ∂ ∂ θ 1 2 ( X θ − Y ) T ( X θ − Y ) \frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) = \frac{\partial}{\partial\mathbf\theta}\frac{1}{2}(\mathbf{X\theta} -\mathbf{Y})^T(\mathbf{X\theta} -\mathbf{Y}) θJ(θ)=θ21(XθY)T(XθY)
           = ∂ ∂ θ 1 2 ( θ T X T X θ − θ T X T Y − Y T X θ + Y T Y ) = \frac{\partial}{\partial\mathbf\theta}\frac{1}{2}(\theta^T\mathbf{X}^T\mathbf{X\theta} - \theta^T\mathbf{X}^T\mathbf{Y} - \mathbf{Y}^T\mathbf{X\theta} + \mathbf{Y}^T\mathbf{Y}) =θ21(θTXTXθθTXTYYTXθ+YTY)
           = ∂ ∂ θ 1 2 ( θ T X T X θ − 2 θ T X T Y + Y T Y ) = \frac{\partial}{\partial\mathbf\theta}\frac{1}{2}(\mathbf{\theta^TX^TX\theta} - 2\mathbf{\theta^TX^TY} + \mathbf{Y^TY}) =θ21(θTXTXθ2θTXTY+YTY)
           = 1 2 ( 2 X T X θ − 2 X T Y ) = \frac{1}{2}(2\mathbf{X^TX\theta} - 2\mathbf{X^TY}) =21(2XTXθ2XTY)

    可得 ∂ ∂ θ J ( θ ) = X T ( X θ − Y ) \frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) = \mathbf{X}^T(\mathbf{X\theta} -\mathbf{Y}) θJ(θ)=XT(XθY)
步骤4中 θ \theta θ向量的更新表达式如下: θ = θ − α X T ( X θ − Y ) \mathbf\theta=\mathbf\theta -\alpha\mathbf{X}^T(\mathbf{X\theta} -\mathbf{Y}) θ=θαXT(XθY)
这里面用到了矩阵求导链式法则,和两个矩阵求导的公式。

  • 公式1: ∂ ∂ X ( X X T ) = 2 X \frac{\partial}{\partial\mathbf{X}}(\mathbf{XX^T}) =2\mathbf{X} X(XXT)=2X
  • 公式2: ∂ ∂ θ ( X θ ) = X T \frac{\partial}{\partial\mathbf\theta}(\mathbf{X\theta}) =\mathbf{X^T} θ(Xθ)=XT

3.2. 最小二乘法

  最小二乘法原理的一般形式很简单,形式为:
目 标 函 数 = ∑ ( 观 测 值 − 理 论 值 ) 2 目标函数 = \sum(观测值 - 理论值)^2 =()2
  观测值就是我们的多组样本,理论值就是我们的假设拟合函数。目标函数也就是在机器学习中常说的损失函数,我们的目标是得到使目标函数最小化时候的拟合函数的模型。
  假设函数 h θ ( x 1 , x 2 , . . . x n ) = θ 0 + θ 1 x 1 + . . . + θ n − 1 x n − 1 h_\theta(x_1, x_2, ...x_n) = \theta_0 +\theta_{1}x_1 + ... +\theta_{n-1}x_{n-1} hθ(x1,x2,...xn)=θ0+θ1x1+...+θn1xn1的矩阵表达方式为:
h θ ( x ) = X θ h_\mathbf{\theta}(\mathbf{x}) =\mathbf{X\theta} hθ(x)=Xθ
其中, 假设函数 h θ ( X ) h_\mathbf{\theta}(\mathbf{X}) hθ(X)为mx1的向量, θ \mathbf{\theta} θ n ∗ 1 n * 1 n1的向量,里面有n个代数法的模型参数。 X \mathbf{X} X m ∗ n m * n mn维的矩阵。m代表样本的个数,n代表样本的特征数。
  损失函数定义为: J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} -\mathbf{Y})^T(\mathbf{X\theta} -\mathbf{Y}) J(θ)=21(XθY)T(XθY)
其中 Y \mathbf{Y} Y是样本的输出向量,维度为 m ∗ 1 m * 1 m1. 1 2 \frac{1}{2} 21在这主要是为了求导后系数为1,方便计算。
  根据最小二乘法的原理,我们要对这个损失函数对 θ \mathbf{\theta} θ向量求导取0。结果如下式(推导过程同上):
∂ ∂ θ J ( θ ) = X T ( X θ − Y ) = 0 \frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) = \mathbf{X}^T(\mathbf{X\theta} -\mathbf{Y}) = 0 θJ(θ)=XT(XθY)=0
  这里面用到了矩阵求导链式法则,和两个矩阵求导的公式。

  • 公式1: ∂ ∂ X ( X X T ) = 2 X \frac{\partial}{\partial\mathbf{X}}(\mathbf{XX^T}) =2\mathbf{X} X(XXT)=2X
  • 公式2: ∂ ∂ θ ( X θ ) = X T \frac{\partial}{\partial\mathbf\theta}(\mathbf{X\theta}) =\mathbf{X^T} θ(Xθ)=XT
    对上述求导等式整理后可得: X T X θ = X T Y \mathbf{X^{T}X\theta} =\mathbf{X^{T}Y} XTXθ=XTY
    两边同时左乘 ( X T X ) − 1 (\mathbf{X^{T}X})^{-1} (XTX)1可得: θ = ( X T X ) − 1 X T Y \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} θ=(XTX)1XTY

  这样我们就一下子求出了 θ \theta θ向量表达式的公式,免去了代数法一个个去求导的麻烦。只要给了数据,我们就可以用 θ = ( X T X ) − 1 X T Y \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} θ=(XTX)1XTY算出 θ \theta θ

4. 优缺点

  • 优点:计算公式简单,求解快,计算结果容易理解(模型的可解释性在实际工作中极其重要!!!)。
  • 缺点:对非线性的数据拟合程度不够好
      一般来说,只要我们觉得数据有线性关系,LinearRegression类是我们首先尝试的。如果发现拟合或者预测的不好,再考虑用其他的线性回归库。

5. 正则化

  为了防止模型的过拟合,我们在建立线性模型的时候经常需要加入正则化项。一般有L1正则化和L2正则化。

5.1. L1正则化

  线性回归的L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数 α \alpha α来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:
J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) + α ∣ ∣ θ ∣ ∣ 1 J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1 J(θ)=21(XθY)T(XθY)+αθ1
其中 n n n为样本个数, α \alpha α为常数系数,需要进行调优。 ∣ ∣ θ ∣ ∣ 1 ||\theta||_1 θ1为L1范数。假设损失函数在二维上求解,则可以画出图像:
@图2. L1正则图像

  Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。
  Lasso回归的求解办法一般有坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression)

5.2. L2正则化

  线性回归的L2正则化通常称为Ridge回归或“权重衰减”(weight decay),它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式如下:
J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) + 1 2 α ∣ ∣ θ ∣ ∣ 2 2 J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2 J(θ)=21(XθY)T(XθY)+21αθ22
其中 α \alpha α为常数系数,需要进行调优。 ∣ ∣ θ ∣ ∣ 2 ||\theta||_2 θ2为L2范数。假设损失函数在二维上求解,则可以画出图像:
@图3. L2正则图像

  Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。
  Ridge回归的求解比较简单,一般用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归类似。令 J ( θ ) J(\mathbf\theta) J(θ)的导数为0,得到下式:
X T ( X θ − Y ) + α θ = 0 \mathbf{X^T(X\theta - Y) + \alpha\theta} = 0 XT(XθY)+αθ=0
整理即可得到最后的 θ \theta θ的结果:
θ = ( X T X + α E ) − 1 X T Y \mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY} θ=(XTX+αE)1XTY
其中 E E E为单位矩阵。

5.3. L1正则和L2正则的区别

  上图2 中彩色实线是 J 0 J_0 J0 J 0 = 1 2 ( X θ − Y ) T ( X θ − Y ) J_0=\frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J0=21(XθY)T(XθY))的等值线,黑色实线是L1正则的等值线。二维空间(权重向量只有 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2)上,L1正则项的等值线是方形,方形与 J 0 J_0 J0的等值线相交时相交点为顶点的概率很大,所以或等于零的概率很大。所以使用L1正则项的解具有稀疏性。

  上图3 中彩色实线是 J 0 J_0 J0的等值线,黑色实线是L2正则的等值线。二维空间(权重向量只有 θ 1 \theta_1 θ1 θ 2 \theta_2 θ2)上,L2正则项的等值线是圆,与 J 0 J_0 J0的等值线相交时或等于零的概率很小。所以使用L2正则项的解不具有稀疏性。在求解过程中,L2通常倾向让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。参数足够小,数据偏移得多一点也不会对结果造成什么影响,可以说“抗扰动能力强”。

  推广到更大维度空间也是同样道理,L2正则项的等值线或等值面是比较平滑的,而L1正则项的等值线或等值面是比较尖锐的,所以这些突出的点与 J 0 J_0 J0接触的机会更大,而在这些突出的点上,会有很多权值等于0。由L1正则化导出的稀疏性质已被广泛用于特征选择,特征选择可以从可用的特征子集中选择有意义的特征。

6. 线性回归的推广

6.1. 多项式回归

  回到我们开始的线性模型, h θ ( x 1 , x 2 , . . . x n ) = θ 0 + θ 1 x 1 + . . . + θ n x n h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n} hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn, 如果这里不仅仅是 x x x 的一次方,比如增加二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的p次方多项式回归的模型:
h θ ( x 1 , x 2 ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 + θ 5 x 1 x 2 h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_1^{2} + \theta_{4}x_2^{2} + \theta_{5}x_{1}x_2 hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x12+θ4x22+θ5x1x2
而令 x 0 = 1 , x 1 = x 1 , x 2 = x 2 , x 3 = x 1 2 , x 4 = x 2 2 , x 5 = x 1 x 2 x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^{2}, x_4 = x_2^{2}, x_5 = x_{1}x_2 x0=1,x1=x1,x2=x2,x3=x12,x4=x22,x5=x1x2,这样我们就得到了下式:
h θ ( x 1 , x 2 ) = θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 3 + θ 4 x 4 + θ 5 x 5 h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_3 + \theta_{4}x_4 + \theta_{5}x_5 hθ(x1,x2)=θ0+θ1x1+θ2x2+θ3x3+θ4x4+θ5x5
  可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征 ( x 1 , x 2 ) (x_1,x_2) (x1,x2), 我们得到一个五元样本特征 ( 1 , x 1 , x 2 , x 1 2 , x 2 2 , x 1 x 2 ) (1, x_1, x_2, x_{1}^2, x_{2}^2, x_{1}x_2) (1,x1,x2,x12,x22,x1x2), 通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归。

6.2. 广义线性回归

  在上一节的线性回归的推广中,我们对样本特征端做了推广,这里我们对于特征 y y y做推广。比如我们的输出 Y Y Y不满足和 X X X的线性关系,但是 l n Y ln\mathbf{Y} lnY X X X满足线性关系,模型函数如下:
l n Y = X θ ln\mathbf{Y} = \mathbf{X\theta} lnY=Xθ
  这样对与每个样本的输入 y y y,我们用 l n y ln\mathbf{y} lny去对应, 从而仍然可以用线性回归的算法去处理这个问题。我们把 l n y ln\mathbf{y} lny一般化,假设这个函数是单调可微函数 g ( . ) g(.) g(.),则一般化的广义线性回归形式是:
g ( Y ) = X θ 或 Y = g − 1 ( X θ ) \mathbf{g}(\mathbf{Y}) = \mathbf{X\theta} 或 \mathbf{Y} = \mathbf{g^{-1}}(\mathbf{X\theta}) g(Y)=XθY=g1(Xθ)
这个函数 g ( . ) g(.) g(.)我们通常称为联系函数。

7. Python调用及参数

from sklearn.linear_model import LinearRegression
clf = LinearRegression() #调用模型
clf.fit(X, y)            #拟合模型
clf.predict(X_pre)       #使用拟合的模型进行预测

参数解释

  • fit_intercept : 是否存在截距,默认存在
  • normalize : 标准化开关,默认关闭
  • n_jobs : 计算所用到的job数量,默认为1。-1表示使用所有CPU计算

8. 写在最后

  1. 持续学习
  2. 模型可解释性
  3. 公式编辑
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值