最小二乘法思想

Posted whitebear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小二乘法思想相关的知识,希望对你有一定的参考价值。

最小二乘法主要用于函数拟合或函数极值,其思想主要是通过将理论值与预测值的距离的平方和达到最小。在机器学习,尤其是回归模型中,经常可以看到最小二乘法的身影。

最小二乘法的原理与要解决的问题

最小二乘法的形式如下式所示:

[目标函数 = sum(理论值 - 预测值)^2 ]

理论值是样本数据,预测值是拟合函数得到的预测值。目标函数就是机器学习中的损失函数。我们的目标就是得到使目标函数最小化时候的拟合函数的模型。
举个线性回归的例子,比如有m个只有一个特征的样本。

[(x_{1},y_{1}),(x_{2},y_{2}),...(x_{m},y_{m}) ]

由于只有一个特征,假设采用的拟合函数为:

[h_{ heta}(x) = heta_0 + heta_1x ]

这样就有了一个特征,对应的拟合函数的两个参数( heta_0 和 heta_1x)需要求出
目标函数为:

[J( heta_0, heta_1)= sum_{i=0}^{m}(y_{i}-h_{ heta}x_{i})^2 ]

用最小二乘法做什么那?使(J( heta_0, heta_1))最小,求出使(J( heta_0, heta_1))最小时的( heta_0 和 heta_1),那最小二乘法怎么才能使(J( heta_0, heta_1))最小呢?

最小二乘法的代数法解法

要使(J( heta_0, heta_1))最小,方法就是对( heta_0 和 heta_1)分别来求偏导数,令偏导数为0,得到一个关于( heta_0 和 heta_1)的二元方程组,求解这个方程组就可以得到( heta_0 和 heta_1)的值。
(J( heta_0, heta_1))( heta_0)求导,得到如下方程:

[sum_{i=1}^m(y_{i}- heta_0 - heta_1x_{i}) = 0 ag{1} ]

(J( heta_0, heta_1))( heta_1)求导,得到如下方程:

[sum_{i=1}^m(y_{i}- heta_0 - heta_1x_{i})x^{i} = 0 ag{2} ]

对公式(1)展开有如下表达;

[msum_{i=1}^mfrac{y_i}{m}-m heta_0-m heta_1sum_{i=1}^mfrac{x_i}{m}=0 ]

(vec x=sum_{i=1}^mfrac{x_i}{m},vec y=sum_{i=1}^mfrac{y_i}{m})
则公式(1)有如下表达:

[mvec y - m heta_0 - m heta_1vec x=0 ]

[=> heta_0= vec y - heta_1vec x ag{3} ]

将公式(3)代入(2)中有:

(sum_{i=1}^my_ix_i- heta_0sum_{i=1}^mx_i- heta_1sum_{i=1}^mx_i^2=0)
=>(sum_{i=1}^my_ix_i-(vec y - heta_1vec x)sum_{i=1}^mx_i- heta_1sum_{i=1}^mx_i^2=0)
=>( heta_1=frac{sum_{i=1}^my_i x_i - vec ysum_{i=1}^mx_i}{sum_{i=1}^mx_i^2-vec x sum_{i=1}^mx_i})
=>( heta_1=frac{sum_{i=1}^my_i x_i - vec ysum_{i=1}^mx_i - mvec yvec x +mvec yvec x}{sum_{i=1}^mx_i^2-2vec x sum_{i=1}^mx_i+vec xsum_{i=1}^mx_i})
=>( heta_1=frac{y_ix_i-vec yx_i-y_ivec x+vec yvec x}{sum_{i=1}^m(x_i^2-2vec xx_i+vec x^2)})
=>( heta_1=frac{(x_i-vec x)(y_i-vec y)}{sum_{i=1}^m(x_i-vec x)^2})

( heta_0 也可根据 heta_0= vec y - heta_1vec x得到)

最小二乘法的矩阵法解法

假设函数(h_ heta(x_1,x_2,...,x_n)= heta_0x_0+ heta_1x_1+...+ heta_{n-1}x_{n-1})的矩阵表达为:

[h_ heta(x) = X heta ]

其中,假设函数(h_ heta(x))为m x 1的向量,( heta)为n x 1的向量,里面有n个代数法的模型参数。X为m x n维的矩阵,m代表样本的个数,n代表样本特征数
损失函数定义为(J( heta)=frac{1}{2}(X_ heta-Y)^T(X_ heta-Y))
其中Y是样本的输出向量,维度为m x 1,(frac{1}{2})主要是为求导后系数为1,方便计算
根据最小二乘法原理,对这个损失函数对( heta)向量求导取0,结果如下所示:

[frac{partial J( heta)}{partial heta} =X^T(X_ heta-Y)=0 ]

这里用到了链式求导法则以及两个矩阵求导的公式

公式1:(frac{partial}{partial x}(X^TX) = 2X,X为向量)
公式2:( abla x f(AX+B)=A^T abla_Yf,Y=AX+B,f(Y)为标量)

对上述求导等式整理可得:

[X^TX_ heta = X^TY ]

两边同时左乘((X^TX)^{-1})可得:

[ heta = (X^TX)^{-1}X^TY ]

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

从上面可以看出,最小二乘法适用简洁高效,比梯度下降这样的迭代法似乎方便很多。但是这里我们就聊聊最小二乘法的局限性。

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

参考:https://www.cnblogs.com/pinard/p/5976811.html

以上是关于最小二乘法思想的主要内容,如果未能解决你的问题,请参考以下文章

机器学习-最小二乘法

最小二乘法

最小二乘法

线性回归之最小二乘法

Python闲谈聊聊最小二乘法以及leastsq函数

Python闲谈聊聊最小二乘法以及leastsq函数