美文网首页机器学习与数据挖掘大数据,机器学习,人工智能程序员
机器学习入门 | 第一个模型(最简单):线性回归模型

机器学习入门 | 第一个模型(最简单):线性回归模型

作者: 胖三斤66 | 来源:发表于2018-08-14 23:56 被阅读58次

    在介绍线性回归模型前,先统一一些等式的表达式。

    x_{j}^{(i)} = 第 i 个训练样本中的第 j 个属性值
    x^{(i)} = 第 i 个训练样本所有属性组成的向量
    m = 样本数
    n = 属性数(数学表达为 \left | x^{(i)} \right |

    给定数据集 D = {(x^{(1)},y_1), (x^{(2)},y_2), ... , (x^{(m)},y_m)},「线性回归 」试图学得一个通过属性的线性组合来进行预测的函数,即「假设函数」为

    h_\Theta(x) = \Theta _{0} + \Theta _{1}x_1 + \Theta _{2}x_2 +...+ \Theta _{n}x_n

    一元线性回归

    假设函数

    首先,介绍最简单的一种情况:只有一个输入变量,即只有一个属性。那么上面的假设函数(预测函数)将简化为:

    h_\Theta(x) = \Theta _{0} + \Theta _{1}x_1

    这称为「一元线性回归」。假设有如下的训练集

    输入 x 输出 y
    0 4
    1 7
    2 7
    3 8

    现在,我们假设 \Theta _{0}=2, \Theta _{1} = 2,即假设函数为h_\Theta(x) = 2 + 2x_1。但是如何衡量这个假设函数的精确程度,即预测值h_\Theta(x)与真实值 y 之间的差别呢。这就涉及到了「代价函数」。

    代价函数

    通过代价函数来衡量我们的假设函数的准确性。这里,代价函数用的是「均方误差」,即

    J(\Theta ) = \frac{1}{2m} \sum_{i=1}^{m}(h_{\Theta }(x^i) - y_i)^{2}

    公式理解:均方误差有非常好的几何意义,(h_{\Theta }(x^i) - y_i)代表预测点与真实点之间的欧氏距离。所有点距离平方之和除以样本数 m 就是均方误差。而再除以 2 是为了方便计算。代价函数值越小越好。

    此时,我们能够具体计算出假设函数的精确度,下面的问题就是「如何提高假设函数的精确度」,即「寻找\Theta _{0},\Theta _{1}令代价函数取最小值」,而这种基于均方误差最小化来进行模型求解的方法称为「最小二乘法」。

    梯度下降算法

    梯度下降算法就是最常用的求代价函数最小值的算法。该算法的思想是通过一步步迭代找到代价函数的最小值。

    想象着,\Theta_0 为 x 轴,\Theta_1 为 y 轴。代价函数J(\Theta) 为 z 轴。图上的点将是代价函数的结果,使用我们的假设和那些特定的θ参数。如下图所示。

    梯度下降算法过程示意图

    算法过程:假设初始参数产生的代价值为图中右边红圈的点,通过梯度下降算法,修改参数的值让代价函数取值就会一步一步下降,比如沿着图中黑线下降。当将最低点(如箭头指示的点)时,算法将不会再改变参数的值(即算法收敛),此时得到的参数让代价函数取值最小。

    需要注意的是, 起始点的位置略有不同,你会得到一个不同的局部最优解,这就是梯度下降算法的一个特点。同时,只有代价函数为凸函数时,代价函数定能取全局最小值。

    在只有两个参数下,算法公式如下:

    两个参数下的梯度下降算法

    公式的理解:对代价函数求偏导数,就是求出该点的切线的斜率,它将为我们提供一个朝向的方向。我们在最陡下降的方向上降低代价函数。每个步骤的大小由参数 α 确定,该参数称为学习率。当梯度下降算法到达最小点(不管是局部还是全局)时,算法再也无法改变参数(因为导数为 0),此时即收敛。

    计算过程需要注意同步更新,具体如下图:

    梯度下降算法计算过程

    多元线性回归

    理解了单元线性回归,我们来讲更一般情况下的线性回归,即多个属性的线性回归,称为「多元线性回归」。

    假设函数

    当输入值有多个(即x=(x_1,x_2,...,x_n))时,线性回归的假设函数将变成

    h_{\Theta}(x)= \Theta _{0}*1 + \Theta _{1}x_1 +...+ \Theta _{n}x_n = \begin{bmatrix} \Theta _{0} & \Theta _{1} & \Theta _{2} & ... & \Theta _{n} \end{bmatrix}*\begin{bmatrix} x_0\\ x_{1}\\ x_{2}\\ ...\\ x_{n} \end{bmatrix}= \Theta^T * x
    其中,约定 x_0 = 1。这里,将公式转换成向量描述,有利于编程实现。在很多编程语言中,内部集成了线性代数的计算并运算速度很快。

    代价函数

    多元线性回归的代价函数还有一样。

    J(\Theta ) = \frac{1}{2m} \sum_{i=1}^{m}(h_{\Theta }(x^i) - y^i)^{2}

    梯度下降算法

    相比于单元线性回归,需要计算的 \Theta,从 \Theta_0,\Theta_1 变成 \Theta_0,\Theta_1, ..., \Theta_n

    多元线性回归梯度下降算法

    同样,可以使用向量表示。

    向量描述多元线性回归梯度下降算法

    这里,说一下梯度下降算法几个建议

    1. 调试梯度下降,以迭代次数为 x 轴,以代价函数值 J(\Theta) 为 y 值,绘制图表。如果 J(\Theta) 增加,则需要降低 \alpha 值;
    2. 如果 J(\Theta) 在一次迭代中减少小于一个很小的值(比如10^{-3})时,可以视为收敛,停止迭代。然而,事实证明这个很小的值很难选择;
    3. \alpha 足够小并且每次迭代都在下降时,建议将 \alpha 减少3的倍数。如 0.3 变为 0.1。

    正规方程

    正规方程可以得到代价函数最小值并且不需要通过迭代,一步即可求得。同时,正规方程得到了充分的证明.

    正规方程公式 :

    \Theta = (X^T * X)^{-1} * X^T * y, X \epsilon \mathbb{R}^{m*(n+1)}
    其中,\Theta, x, y 均为向量。需要注意的是,(x^T * x) 可能出现不可逆的情况,具体参考线性代数。这里提及常见的两种不可逆的情况:

    常见的不可逆的情况

    正规方程与梯度下降算法的比较

    梯度下降算法 正规方程
    需要选择 \alpha 不需要选择 \alpha
    需要迭代 不需要迭代
    时间复杂度O(kn^2) 时间复杂度O(n^3),因为需要计算(x^T * x)^{-1}
    当 n 较大时,效果很好 当 n 较大时,运行慢

    根据经验,两种算法适用范围

    1. 当 n 大的时候(大概量级超过10^4),使用梯度下降算法,因为正规方程需要计算 n*n 逆矩阵耗时巨大;
    2. 当 n 小的时候(大概量级不超过10^4),使用正规方程。

    参考文献

    1. Coursesa 机器学习

    相关文章

      网友评论

      本文标题:机器学习入门 | 第一个模型(最简单):线性回归模型

      本文链接:https://www.haomeiwen.com/subject/glegvftx.html