zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

机器学习——最小二乘法

2023-02-18 16:34:35 时间

1 前言

  最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具 。

2 定义

  最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 。
  最小二乘法还可用于曲线拟合,其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

3 最小二乘法基本思想

  最小二乘法是由勒让德在19世纪发现的,形式如下式:
    $目标函数 = \sum\limits(观测值-理论值)^2$
  观测值是多组样本,理论值就是假设拟合函数。目标函数是机器学习中常说的损失函数,目标是得到使目标函数最小化时候的拟合函数的模型。

  举一个最简单的线性回归的简单例子,如有 $m$ 个只有一个特征的样本: $(x_i,y_i)(i=1,2,...,m)$,样本采用$h_\theta (x)$的多项式拟合函数:

    $h_\theta(x) = \theta_0 + \theta_1 x ,( \theta_0,\theta_1为参数)$

  对于一个样本 $x$,对应的拟合函数有两个参数 $\theta_0$ 和 $ \theta_1$ 需求出。
  其目标函数为:

    $J(\theta_0, \theta_1) = \sum\limits_{i=1}^{m}(y^{(i)} - h_\theta(x^{(i)})^2 = \sum\limits_{i=1}^{m}(y^{(i)} - \theta_0 - \theta_1 x^{(i)})^2$

  目的是最小化目标函数

    $min \  J(\theta_0, \theta_1)=min  \sum\limits_{i=1}^{m}(y^{(i)} - h_\theta(x^{(i)})^2 $

4 最小二乘法的代数法解法

  要使 $J(\theta_0, \theta_1)$ 最小,方法就是对 $\theta_0$和 $\theta_1$ 分别求偏导数,令偏导数为0,得到一个关于 $\theta_0$和 $\theta_1$的二元方程组。求解这个二元方程组,就可以得到 $\theta_0$和 $\theta_1$的值。下面具体看看过程。
  $J(\theta_0, \theta_1)$对 $\theta_0$求导,得到如下方程:

    $\sum\limits_{i=1}^{m}(y^{(i)} - \theta_0 - \theta_1 x^{(i)}) = 0$

  $J(\theta_0, \theta_1)$对 $\theta_1$求导,得到如下方程:

    $\sum\limits_{i=1}^{m}(y^{(i)} - \theta_0 - \theta_1 x^{(i)})x^{(i)} = 0$

  $①$和$②$组成一个二元一次方程组,求出$\theta_0$和 $\theta_1$的值:

    $\theta_0 = \sum\limits_{i=1}^{m}\big(x^{(i)})^2\sum\limits_{i=1}^{m}y^{(i)} - \sum\limits_{i=1}^{m}x^{(i)}\sum\limits_{i=1}^{m}x^{(i)}y^{(i)} \Bigg/ m\sum\limits_{i=1}^{m}\big(x^{(i)})^2 - \big(\sum\limits_{i=1}^{m}x^{(i)})^2$

    $\theta_1 = m\sum\limits_{i=1}^{m}x^{(i)}y^{(i)} - \sum\limits_{i=1}^{m}x^{(i)}\sum\limits_{i=1}^{m}y^{(i)} \Bigg/ m\sum\limits_{i=1}^{m}\big(x^{(i)})^2 - \big(\sum\limits_{i=1}^{m}x^{(i)})^2$

  推广到多个样本特征的线性拟合

  拟合函数表示为 $h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}$,其中$\theta_i\ (i = 0,1,2... n)$ 为模型参数,$x_i\ (i = 0,1,2... n)$为每个样本的 $n$ 个特征值。简化表示,增加一个特征 $x_0 = 1$,这样拟合函数表示为:

    $h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}$

  目标函数表示为:

    $J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{j=1}^{m}(h_\theta(x_0^{(j)}), x_1^{(j)}, ...x_n^{(j)})) - y^{(j)}))^2 = \sum\limits_{j=1}^{m}(\sum\limits_{i=0}^{n}\theta_{i}x_{i}^{(j)}- y^{(j)})^2$

  利用目标函数分别对$\theta_i \ (i=0,1,...n)$求导,并令导数为$0$可得:

    $\sum\limits_{j=0}^{m}(\sum\limits_{i=0}^{n}(\theta_{i}x_{i}^{(j)} - y^{(j)})x_i^{(j)} ,\ (i=0,1,...n)$

  得到一个$N+1$元一次方程组,这个方程组有 $N+1$ 个方程,求解这个方程,就可以得到所有的 $N+1$ 个未知的 $\theta$ 。

5 最小二乘法的矩阵法解法

  矩阵法比代数法要简洁,且矩阵运算可以取代循环,所以现在很多书和机器学习库都是用的矩阵法来做最小二乘法。
  用上面多元线性回归例子来描述矩阵法解法。
  假设函数 $h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n-1}x_{n-1}$ 的矩阵表达方式为:

    $h_\mathbf{\theta}(\mathbf{x}) = \mathbf{X\theta}$

  其中, 假设函数$h_\mathbf{\theta}(\mathbf{X})$为 $m \times 1$ 的向量,$\mathbf{\theta}$为 $n \times 1$的向量,里面有 $n$个代数法的模型参数。$\mathbf{X}$ 为 $m \times  n$ 维的矩阵。$m$代表样本的个数,$n$ 代表样本的特征数。
  目标函数定义为

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

  其中 $\mathbf{Y}$ 是样本的输出向量,维度为$m \times 1$。$\frac{1}{2}$ 在这主要是为了求导后系数为$1$,方便计算。
  根据最小二乘法的原理,要对这个目标函数对$\mathbf{\theta}$向量求导取$0$。结果如下式:

    $\frac{\partial}{\partial\mathbf\theta}J(\mathbf\theta) = \mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y}) = 0$

  这里面用到了矩阵求导链式法则,和两个个矩阵求导的公式。
  公式1:$\frac{\partial}{\partial\mathbf{x}}(\mathbf{x^Tx}) =2\mathbf{x}\;\;x为向量$
  公式2:$\nabla_Xf(AX+B) = A^T\nabla_Yf,\;\; Y=AX+B,\;\;f(Y)为标量$
  对上述求导等式整理后可得:

    $\mathbf{X^{T}X\theta} = \mathbf{X^{T}Y}$

  两边同时左乘$(\mathbf{X^{T}X})^{-1}$可得:

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

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

6 最小二乘法的局限性和适用场景  

  从上面可以看出,最小二乘法适用简洁高效,比梯度下降似乎方便很多。

  最小二乘法的局限性:
  首先,最小二乘法需要计算 $\mathbf{X^{T}X}$ 的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。当然,可以通过对样本数据进行整理,去掉冗余特征。让$\mathbf{X^{T}X}$的行列式不为$0$,然后继续使用最小二乘法。
  第二,当样本特征 $n$ 非常的大的时候,计算$\mathbf{X^{T}X}$的逆矩阵是一个非常耗时的工作($nxn$的矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。那这个n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧。或者通过主成分分析降低特征的维度后再用最小二乘法。
  第三,如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。
  第四,当样本量 $m$ 很少,小于特征数 $n$ 的时候,这时拟合方程是欠定的,常用的优化方法都无法去拟合数据。当样本量 $m$ 等于特征数 $n$ 的时候,用方程组求解就可以了。当$m$ 大于 $n$ 时,拟合方程是超定的,也就是常用与最小二乘法的场景了。

参考文献

1.最小二乘法(least sqaure method)

2.最小二乘法小结

3.如何理解最小二乘法?