线性回归之梯度下降法和最小二乘法

回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析;如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。常用的方法有梯度下降法和最小二乘法。

1.梯度下降法(GD)

1.1 原理:

        \theta =\theta -\alpha \frac{\partial }{\partial \theta }J\left ( \theta \right )

        其中,\alpha为学习速率或步长(Learning rate)

1.2 假设函数:

        h_{\theta }\left ( x \right )=\theta _{0}+\theta _{1}x_{1}+...+\theta _{n}x_{n}

1.3 损失函数:

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

1.4 分析过程:

        1.4.1 批量梯度下降法(BGD)

               批量梯度下降法,是梯度下降法最常用的形式,具体做法也就是在更新参数时使用所有m个的样本来进行更新。更新公式为:

                \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\sum_{i=1}^{m}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

        1.4.2 随机梯度下降法(SGD)

                随机梯度下降法,其实和批量梯度下降法原理类似,区别在与求梯度时没有用所有的m个样本的数据,而是仅仅选取一个样本 i 来求梯度。更新公式为:

                \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

                随机梯度下降法,和4.1的批量梯度下降法是两个极端,一个采用所有数据来梯度下降,一个用一个样本来梯度下降。自然各自的优缺点都非常突出。对于训练速度来说,随机梯度下降法由于每次仅仅采用一个样本来迭代,训练速度很快,而批量梯度下降法在样本量很大的时候,训练速度不能让人满意。对于准确度来说,随机梯度下降法用于仅仅用一个样本决定梯度方向,导致解很有可能不是最优。

        1.4.3 小批量梯度下降法(MBGD)

                 小批量梯度下降法是批量梯度下降法和随机梯度下降法的折衷,也就是对于m个样本,我们采用x个样子来迭代,1

                \theta _{j}:=\theta _{j}-\alpha \frac{1}{m}\sum_{i=t}^{t+x-1}\left ( h_{\theta }\left ( x^{\left ( i \right )} \right )-y^{\left ( i \right )} \right )x_{j}^{\left ( i \right )}

1.5 算法调优:

        在使用梯度下降法时,需要进行调优。哪些地方需要调优呢?

    ① 算法的步长选择。在前面的算法描述中,我提到取步长为1,但是实际上取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。前面说了。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。对于步长,可以使用下列数据进行测试:

            0.001、0.01、0.1、1、10...,或者可以用0.001、0.003、0.01、0.03、0.1、0.3、1...,即可以用3倍或10倍的速度,将其慢慢调整到一个区间,然后再进行微调

    ② 算法参数的初始值选择。初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。

    ③ 归一化。 由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望和标准差std(x),然后转化为:

            \frac{x-\bar{x}}{std\left ( x \right )}

            这样特征的新期望为0,新方差为1,迭代速度可以大大加快。

2.最小二乘法(OLS)

矩阵表达式: 

\begin{bmatrix} 1 & x_{1}^{(1)}&x_{2}^{(1)} &... &x_{n}^{(1)} \\ 1 & x_{1}^{(2)}&x_{2}^{(2)} &... &x_{n}^{(2)} \\ 1 & x_{1}^{(3)}&x_{2}^{(3)} &... &x_{n}^{(3)} \\ & ...& & ...&... \\ 1 & x_{1}^{(m)}&x_{2}^{(m)} &... &x_{n}^{(m)} \\ \end{bmatrix}\begin{bmatrix} \theta _{0}\\ \theta _{1}\\ \theta _{2}\\ ...\\ \theta _{n}\\ \end{bmatrix}=\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ y^{(3)}\\ ...\\ y^{(m)}\\ \end{bmatrix}

令:

        X=\begin{bmatrix} 1 & x_{1}^{(1)}&x_{2}^{(1)} &... &x_{n}^{(1)} \\ 1 & x_{1}^{(2)}&x_{2}^{(2)} &... &x_{n}^{(2)} \\ 1 & x_{1}^{(3)}&x_{2}^{(3)} &... &x_{n}^{(3)} \\ & ...& & ...&... \\ 1 & x_{1}^{(m)}&x_{2}^{(m)} &... &x_{n}^{(m)} \\ \end{bmatrix}y=\begin{bmatrix} y^{(1)}\\ y^{(2)}\\ y^{(3)}\\ ...\\ y^{(m)}\\ \end{bmatrix}

那么,

        线性回归之梯度下降法和最小二乘法_第1张图片        

当然,(X^{T}X)^{-1}有可能不存在,这种情况是极少数。如果不可逆,则一般考虑下面两种情况:

        (1)移除冗余特征。某一些特征之间存在线性依赖

        (2)特征太多时,删除一些特征,比如(m

3.梯度下降法和最小二乘法的选择

梯度下降法 最小二乘法

缺点:

  • 需要选择学习率\alpha
  • 需要多次迭代
  • 特征值范围相差太大时,需要归一化

优点:

  • 当特征数n很大时,能够较好的工作

优点:

  • 不需要选择学习率\alpha
  • 不需要多次迭代
  • 不需要归一化

缺点:

  • 当特征数n很大时,运算的很慢,因为求逆矩阵比较慢

通常情况下,当n<10000时,用最小二乘法。当n>=10000时,考虑用梯度下降法。

一些更复杂的算法下只能选择梯度下降法

你可能感兴趣的:(机器学习,线性回归,机器学习,线性回归,梯度下降法,最小二乘法)