最小二乘法小結


    最小二乘法是用來做函數擬合或者求函數極值的方法。在機器學習,尤其是回歸模型中,經常可以看到最小二乘法的身影,這里就對我對最小二乘法的認知做一個小結。

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

    最小二乘法是由勒讓德在19世紀發現的,原理的一般形式很簡單,當然發現的過程是非常艱難的。形式如下式:$$目標函數 = \sum\limits(觀測值-理論值)^2$$

    觀測值就是我們的多組樣本,理論值就是我們的假設擬合函數。目標函數也就是在機器學習中常說的損失函數,我們的目標是得到使目標函數最小化時候的擬合函數的模型。舉一個最簡單的線性回歸的簡單例子,比如我們有m個只有一個特征的樣本:

    \((x^{(1)},y^{(1)}), (x^{(2)},y^{(2)},...(x^{(m)},y^{(m)})\)

    樣本采用下面的擬合函數:

    \(h_\theta(x) = \theta_0 + \theta_1 x\)

    這樣我們的樣本有一個特征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 \) 

    用最小二乘法做什么呢,使\(J(\theta_0, \theta_1)\)最小,求出使\(J(\theta_0, \theta_1)\)最小時的\(\theta_0 和 \theta_1\),這樣擬合函數就得出了。

    那么,最小二乘法怎么才能使\(J(\theta_0, \theta_1)\)最小呢?

2.最小二乘法的代數法解法

    上面提到要使\(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)}\) = 0   (i=0,1,...n)

    這樣我們得到一個N+1元一次方程組,這個方程組有N+1個方程,求解這個方程,就可以得到所有的N+1個未知的\(\theta\)。

    

    這個方法很容易推廣到多個樣本特征的非線性擬合。原理和上面的一樣,都是用損失函數對各個參數求導取0,然后求解方程組得到參數值。這里就不累述了。

 

3.最小二乘法的矩陣法解法

    矩陣法比代數法要簡潔,且矩陣運算可以取代循環,所以現在很多書和機器學習庫都是用的矩陣法來做最小二乘法。

    這里用上面的多元線性回歸例子來描述矩陣法解法。

    

    假設函數\(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})\)為mx1的向量,\(\mathbf{\theta}\)為nx1的向量,里面有n個代數法的模型參數。\(\mathbf{X}\)為mxn維的矩陣。m代表樣本的個數,n代表樣本的特征數。

    損失函數定義為\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\)

    其中\(\mathbf{Y}\)是樣本的輸出向量,維度為mx1. \(\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\)。

 

4.最小二乘法的局限性和適用場景  

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

    首先,最小二乘法需要計算\(\mathbf{X^{T}X}\)的逆矩陣,有可能它的逆矩陣不存在,這樣就沒有辦法直接用最小二乘法了,此時梯度下降法仍然可以使用。當然,我們可以通過對樣本數據進行整理,去掉冗余特征。讓\(\mathbf{X^{T}X}\)的行列式不為0,然后繼續使用最小二乘法。

    第二,當樣本特征n非常的大的時候,計算\(\mathbf{X^{T}X}\)的逆矩陣是一個非常耗時的工作(nxn的矩陣求逆),甚至不可行。此時以梯度下降為代表的迭代法仍然可以使用。那這個n到底多大就不適合最小二乘法呢?如果你沒有很多的分布式大數據計算資源,建議超過10000個特征就用迭代法吧。或者通過主成分分析降低特征的維度后再用最小二乘法。

    第三,如果擬合函數不是線性的,這時無法使用最小二乘法,需要通過一些技巧轉化為線性才能使用,此時梯度下降仍然可以用。

    第四,講一些特殊情況。當樣本量m很少,小於特征數n的時候,這時擬合方程是欠定的,常用的優化方法都無法去擬合數據。當樣本量m等於特征數n的時候,用方程組求解就可以了。當m大於n時,擬合方程是超定的,也就是我們常用與最小二乘法的場景了。

 

(歡迎轉載,轉載請注明出處。歡迎溝通交流: liujianping-ok@163.com)  


免責聲明!

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



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