最小二乘法主要用於函數擬合或函數極值,其思想主要是通過將理論值與預測值的距離的平方和達到最小。在機器學習,尤其是回歸模型中,經常可以看到最小二乘法的身影。
最小二乘法的原理與要解決的問題
最小二乘法的形式如下式所示:
理論值是樣本數據,預測值是擬合函數得到的預測值。目標函數就是機器學習中的損失函數。我們的目標就是得到使目標函數最小化時候的擬合函數的模型。
舉個線性回歸的例子,比如有m個只有一個特征的樣本。
由於只有一個特征,假設采用的擬合函數為:
這樣就有了一個特征,對應的擬合函數的兩個參數\(\theta_0 和\theta_1x\)需要求出
目標函數為:
用最小二乘法做什么那?使\(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\)求導,得到如下方程:
\(J(\theta_0,\theta_1)\)對\(\theta_1\)求導,得到如下方程:
對公式(1)展開有如下表達;
令\(\vec x=\sum_{i=1}^m\frac{x_i}{m},\vec y=\sum_{i=1}^m\frac{y_i}{m}\)
則公式(1)有如下表達:
將公式(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)\)為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,結果如下所示:
這里用到了鏈式求導法則以及兩個矩陣求導的公式
公式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)^{-1}\)可得:
也就是正規方程(normal equation)
最小二乘法的局限性和使用場景
從上面可以看出,最小二乘法適用簡潔高效,比梯度下降這樣的迭代法似乎方便很多。但是這里我們就聊聊最小二乘法的局限性。
- 第一、最小二乘法需要計算\(X^TX\)的逆矩陣,有時它的逆矩陣是不存在的,這樣就不能直接只用最小二乘法了。此時以梯度下降法為代表的迭代法仍然可用。當然,我們也可以對樣本數據進行整理,去除掉冗余特征,讓\(X^TX\)的行列式不為0,然后繼續使用
- 第二、當樣本特征n非常da的時候,計算\(X^TX\)的逆矩陣是一個非常耗時的工作(n x n的矩陣求逆),甚至不可行。此時以梯度下降法為代表的迭代法仍然可用。那這個n到底多大就不適合最小二乘法呢?如果你沒有很多的分布式大數據計算資源,建議超過10000個特征就用迭代法吧,或者通過主成分分析降低特征的維度后再用最小二乘法
- 第三、如果擬合函數不是線性的,這時無法使用最小二乘法,需要通過一些技巧轉化為線性才能使用,此時梯度下降仍可使用
- 第四、特殊情況,當樣本量m很少,小於特征數n的時候,這時擬合方程是欠定的,常用的優化方法都無法去擬合數據。當樣本量m等於特征數n的時候,用方程組求解就可以了。當m大於n時,擬合方程是超定的,也就是我們常用與最小二乘法的場景了。