• 机器学习——线性回归


    1 前言

      线性回归形式简单、易于建模,但却蕴涵着机器学习中一些重要的基本思想。许多功能更为强大的非线性模型可在线性模型的基础上通过引入层级结构或高维映射而得。此外,由于线性回归的解直观表达了各属性在预测中的重要性,因此线性回归有很好的可解释性。

    1.1 什么是回归分析

      回归分析是一种预测性的建模技术,研究因变量和自变量之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线、直线来拟合数据点,目标是使曲线到数据点的距离差异最小。

    2 线性回归

      线性回归是回归问题中的一种,线性回归假设目标值与特征之间线性相关,一般形式满足多元一次方程。通过构建损失函数,求解损失函数最小值时的参数$w$和$b$。一般形式如下:

        $hat{y} =wx+b$

      其中 $hat{y}$ 为预测值,自变量 $x$ 和因变量 $y$ 已知,为预测新增一个$x$,求对应的$y$值。为构建这个函数关系,目标是通过已知数据点,求解线性模型中 $w$ 和 $b$ 两个参数。

    2.1 线性回归原理

       线性回归问题:有$m$个样本,每个样本对应于一个 $n$ 维特征和一个结果输出。

       训练数据形式:

        $(x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)},...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_n)$

       通过求得参数 $( heta_0, heta_1,... heta_m)$ 得到线性回归模型:

         $h_ heta(x_1, x_2, ...x_n) = heta_0 + heta_{1}x_1 + ... + heta_{n}x_{n}$

      其中 $ heta_i (i = 0,1,2... n)$ 为模型参数,$x_i (i = 0,1,2... n)$ 为每个样本的 $n$ 个特征值。增加一个特征$x_0 = 1$,进行简化:

        $h_ heta(x_0, x_1, ...x_n) = sumlimits_{i=0}^{n} heta_{i}x_{i}$

      进一步用矩阵形式表达更加简洁:

         $h_θ(X)=Xθ$

      式中 $mathbf{X}$ 为 $m imes n$ 维的矩阵。$m$ 代表样本的个数,$n$ 代表样本的特征数。$mathbf{ heta}$ 为 $n imes 1$ 的列向量,代表 $n$ 个模型参数 $ heta_i$。函数 $h_mathbf{ heta}(mathbf{X})$ 为 $m imes 1$ 的向量。

      得到模型,需求出损失函数,一般线性回归用均方误差作为损失函数。损失函数的代数法表示如下:

        $J( heta_0, heta_1..., heta_n) = sumlimits_{i=1}^{m}(h_ heta(x_0^{(i)}, x_1^{(i)}, ...x_n^{(i)}) - y_i)^2$

      进一步用矩阵形式表达损失函数

        $J(mathbf heta) = frac{1}{2}(mathbf{X heta} - mathbf{Y})^T(mathbf{X heta} - mathbf{Y})$

    2.2 损失函数最小化

      对于线性回归的损失函数常用的有两种方法来求损失函数最小化时的 $mathbf{ heta}$ 参数:1、梯度下降法;2、最小二乘法。

      1、梯度下降法,则 $mathbf{ heta}$ 的迭代公式如下:
        $mathbf heta= mathbf heta - alphamathbf{X}^T(mathbf{X heta} - mathbf{Y})$

      通过若干次迭代,可得到最终的 $mathbf{ heta}$ 的结果。
      2、最小二乘法,则 $mathbf{ heta}$ 的迭代公式如下

         $mathbf{ heta} = (mathbf{X^{T}X})^{-1}mathbf{X^{T}Y}$

       对于线性回归,还有其他算法如:牛顿法、拟牛顿法。

    3 多项式线性回归

       我们遇到的数据不一定都是线性的形式,如式$y=x_1^2+x_2^2$的模型,那线性回归很难拟合这个函数,这时候就需要用到多项式回归了。

       回到我们开始的线性模型,$h_ heta(x_1, x_2, ...x_n) = heta_0 + heta_{1}x_1 + ... + heta_{n}x_{n}$, 如果这里不仅仅是x的一次方,而是二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的2次多项式回归的模型:

         $h_ heta(x_1, x_2) = heta_0 + heta_{1}x_1 + heta_{2}x_{2} + heta_{3}x_1^{2} + heta_{4}x_2^{2} + heta_{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$,这样我们就得到了下式:

        $h_ heta(x_1, x_2) = heta_0 + heta_{1}x_1 + heta_{2}x_{2} + heta_{3}x_3 + heta_{4}x_4 + heta_{5}x_5$

      可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征$(x_1,x_2)$,我们得到一个五元样本特征$(1,x_1,x_2,x^2_1,x^2_2,x_1x_2)$,通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归,但是达到了非线性拟合的效果。

    4 广义线性回归  

      在上一节的线性回归的多项式中,我们对样本特征进行了变换,用线性回归完成了非线性回归的效果。这里我们对于特征$y$做推广。

      比如我们的输出$Y$不满足和$X$的线性关系,但是$logY$和$X$满足线性关系,模型函数如下:

        $logY=Xθ$

      这样对与每个样本的输入$y$,我们用$ogy$去对应, 从而仍然可以用线性回归的算法去处理这个问题。我们把 $logy$一般化,假设这个函数是单调可微函数g(.),则一般化的广义线性回归形式是:$g(Y)=Xθ$或者$Y=g−1(Xθ)$。这个函数$g(.)$我们通常称为联系函数。后面会讲到的逻辑回归这是在联系函数的基础上进行分类的。

    5 线性回归的正则化

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

     5.1 L1正则化Lasso回归

       $L1$正则化通常称为$Lasso$回归,它和一般线性回归的区别是在损失函数上增加了一个$L1$正则化的项,$L1$正则化的项有一个常数系数$alpha$来调节损失函数的均方差项和正则化项的权重,具体$Lasso$回归的损失函数表达式如下: 

        $J(θ)=frac{1}{2n}(Xθ-Y)^T(Xθ-Y)+alpha|θ|_1$

      其中$n$为样本个数,$alpha$为常数系数,需要进行调优。$|θ|_1$为$L1$范数。

      Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。

    5.2  L2正则化Ridge回归

      $L2$正则化通常称为$Ridge$回归,它和一般线性回归的区别是在损失函数上增加了一个$L2$正则化的项,和$Lasso$回归的区别是$Ridge$回归的正则化项是$L2$范数,而$Lasso$回归的正则化项是$L1$范数。具体$Ridge$回归的损失函数表达式如下:
        $J(θ)=frac{1}{2}(Xθ-Y)^T(Xθ-Y)+frac{1}{2}alpha|θ|_2^2$
      其中$alpha$为常数系数,需要进行调优。$|θ|_2$为$L2$范数。
      $Ridge$回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和$Lasso$回归比,这会使得模型的特征留的特别多,模型解释性差。

    6 总结

       线性回归的算法本身并不复杂,但是在它的基础上延伸出来的内容可谓是相当丰富,涉及到了多项式中的特征转换(特征工程)、针对过拟合的正则化项、运用非常广泛的逻辑回归等。要真正理解它需要对机器学习的知识融汇贯通。

    参考文献

    1.线性回归(Linear Regression)

    2.线性回归

    3.线性回归原理小结

    因上求缘,果上努力~~~~ 作者:每天卷学习,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/14829205.html

  • 相关阅读:
    浮动与浮动的清除
    【最全】经典排序算法(C语言)
    Python类中的self到底是干啥的
    浅析Python3中的bytes和str类型
    Shell十三问[转]
    VMware下对虚拟机Ubuntu14系统所在分区sda1进行磁盘扩容
    C语言运算符优先级
    mysql主要性能监控指标
    sql 优化
    npm install安装时忘记--save解决方法
  • 原文地址:https://www.cnblogs.com/BlairGrowing/p/14829205.html
Copyright © 2020-2023  润新知