最小二乘法思想


最小二乘法主要用於函數擬合或函數極值,其思想主要是通過將理論值與預測值的距離的平方和達到最小。在機器學習,尤其是回歸模型中,經常可以看到最小二乘法的身影。

最小二乘法的原理與要解決的問題

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

\[目標函數 = \sum(理論值 - 預測值)^2 \]

理論值是樣本數據,預測值是擬合函數得到的預測值。目標函數就是機器學習中的損失函數。我們的目標就是得到使目標函數最小化時候的擬合函數的模型。
舉個線性回歸的例子,比如有m個只有一個特征的樣本。

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

由於只有一個特征,假設采用的擬合函數為:

\[h_{\theta}(x) = \theta_0 + \theta_1x \]

這樣就有了一個特征,對應的擬合函數的兩個參數\(\theta_0 和\theta_1x\)需要求出
目標函數為:

\[J(\theta_0,\theta_1)= \sum_{i=0}^{m}(y_{i}-h_{\theta}x_{i})^2 \]

用最小二乘法做什么那?使\(J(\theta_0,\theta_1)\)最小,求出使\(J(\theta_0,\theta_1)\)最小時的\(\theta_0 和\theta_1\),那最小二乘法怎么才能使\(J(\theta_0,\theta_1)\)最小呢?

最小二乘法的代數法解法

要使\(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_{i=1}^m(y_{i}-\theta_0 - \theta_1x_{i}) = 0 \tag{1} \]

\(J(\theta_0,\theta_1)\)\(\theta_1\)求導,得到如下方程:

\[\sum_{i=1}^m(y_{i}-\theta_0 - \theta_1x_{i})x^{i} = 0 \tag{2} \]

對公式(1)展開有如下表達;

\[m\sum_{i=1}^m\frac{y_i}{m}-m\theta_0-m\theta_1\sum_{i=1}^m\frac{x_i}{m}=0 \]

\(\vec x=\sum_{i=1}^m\frac{x_i}{m},\vec y=\sum_{i=1}^m\frac{y_i}{m}\)
則公式(1)有如下表達:

\[m\vec y - m\theta_0 - m\theta_1\vec x=0 \]

\[=>\theta_0= \vec y - \theta_1\vec x \tag{3} \]

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

\(\sum_{i=1}^my_ix_i-\theta_0\sum_{i=1}^mx_i-\theta_1\sum_{i=1}^mx_i^2=0\)
=>\(\sum_{i=1}^my_ix_i-(\vec y - \theta_1\vec x)\sum_{i=1}^mx_i-\theta_1\sum_{i=1}^mx_i^2=0\)
=>\(\theta_1=\frac{\sum_{i=1}^my_i x_i - \vec y\sum_{i=1}^mx_i}{\sum_{i=1}^mx_i^2-\vec x \sum_{i=1}^mx_i}\)
=>\(\theta_1=\frac{\sum_{i=1}^my_i x_i - \vec y\sum_{i=1}^mx_i - m\vec y\vec x +m\vec y\vec x}{\sum_{i=1}^mx_i^2-2\vec x \sum_{i=1}^mx_i+\vec x\sum_{i=1}^mx_i}\)
=>\(\theta_1=\frac{y_ix_i-\vec yx_i-y_i\vec x+\vec y\vec x}{\sum_{i=1}^m(x_i^2-2\vec xx_i+\vec x^2)}\)
=>\(\theta_1=\frac{(x_i-\vec x)(y_i-\vec y)}{\sum_{i=1}^m(x_i-\vec x)^2}\)

\(\theta_0 也可根據\theta_0= \vec y - \theta_1\vec x得到\)

最小二乘法的矩陣法解法

假設函數\(h_\theta(x_1,x_2,...,x_n)=\theta_0x_0+\theta_1x_1+...+\theta_{n-1}x_{n-1}\)的矩陣表達為:

\[h_\theta(x) = X\theta \]

其中,假設函數\(h_\theta(x)\)為m x 1的向量,\(\theta\)為n x 1的向量,里面有n個代數法的模型參數。X為m x n維的矩陣,m代表樣本的個數,n代表樣本特征數
損失函數定義為\(J(\theta)=\frac{1}{2}(X\theta-Y)^T(X\theta-Y)\)
其中Y是樣本的輸出向量,維度為m x 1,\(\frac{1}{2}\)主要是為求導后系數為1,方便計算
根據最小二乘法原理,對這個損失函數對\(\theta\)向量求導取0,結果如下所示:

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

這里用到了鏈式求導法則以及兩個矩陣求導的公式

公式1:\(\frac{\partial}{\partial x}(X^TX) = 2X,X為向量\)
公式2:\(\nabla x f(AX+B)=A^T\nabla_Yf,Y=AX+B,f(Y)為標量\)

對上述求導等式整理可得:

\[X^TX\theta = X^TY \]

兩邊同時左乘\((X^TX)^{-1}\)可得:

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

也就是正規方程(normal equation)

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

從上面可以看出,最小二乘法適用簡潔高效,比梯度下降這樣的迭代法似乎方便很多。但是這里我們就聊聊最小二乘法的局限性。

  • 第一、最小二乘法需要計算\(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM