最小二乘法小結

http://www.cnblogs.com/pinard/p/5976811.htmlhtml

 

最小二乘法是用來作函數擬合或者求函數極值的方法。在機器學習,尤爲是迴歸模型中,常常能夠看到最小二乘法的身影,這裏就對我對最小二乘法的認知作一個小結。機器學習

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

    最小二乘法是由勒讓德在19世紀發現的,原理的通常形式很簡單,固然發現的過程是很是艱難的。形式以下式:分佈式

      目標函數 = Σ(觀測值-理論值)2函數

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

    (x(1),y(1)),(x(2),y(2),...(x(m),y(m))大數據

 

    樣本採用下面的擬合函數:優化

    hθ(x)=θ0+θ1xatom

 

    這樣咱們的樣本有一個特徵x,對應的擬合函數有兩個參數θ0θ1spa

須要求出。orm

    咱們的目標函數爲:

    J(θ0,θ1)=i=1m(y(i)hθ(x(i))2=i=1m(y(i)θ0θ1x(i))2

 

    用最小二乘法作什麼呢,使J(θ0,θ1)

最小,求出使J(θ0,θ1)最小時的θ0θ1

,這樣擬合函數就得出了。

    那麼,最小二乘法怎麼才能使J(θ0,θ1)

最小呢?

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

    上面提到要使J(θ0,θ1)

最小,方法就是對θ0θ1分別來求偏導數,令偏導數爲0,獲得一個關於θ0θ1的二元方程組。求解這個二元方程組,就能夠獲得θ0θ1

的值。下面咱們具體看看過程。

    J(θ0,θ1)θ0

求導,獲得以下方程:

    i=1m(y(i)θ0θ1x(i))=0

                                 ①

    J(θ0,θ1)θ1

求導,獲得以下方程:

    i=1m(y(i)θ0θ1x(i))x(i)=0

         ②

    ①和②組成一個二元一次方程組,容易求出θ0θ1

的值:

    

    θ0=i=1m(x(i))2i=1my(i)i=1mx(i)i=1mx(i)y(i)/mi=1m(x(i))2(i=1mx(i))2

 

 

    θ1=mi=1mx(i)y(i)i=1mx(i)i=1my(i)/mi=1m(x(i))2(i=1mx(i))2

 

 

    這個方法很容易推廣到多個樣本特徵的線性擬合。

    擬合函數表示爲 hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn

, 其中θi (i = 0,1,2... n)爲模型參數,xi (i = 0,1,2... n)爲每一個樣本的n個特徵值。這個表示能夠簡化,咱們增長一個特徵x0=1

,這樣擬合函數表示爲:

    hθ(x0,x1,...xn)=i=0nθixi

    損失函數表示爲:

           J(θ0,θ1...,θn)=j=1m(hθ(x(j)0),x(j)1,...x(j)n))y(j)))2=j=1m(i=0nθix(j)iy(j))2

 

    利用損失函數分別對θi

(i=0,1,...n)求導,並令導數爲0可得:

    j=0m(i=0n(θix(j)iy(j))x(j)i

= 0   (i=0,1,...n)

    這樣咱們獲得一個N+1元一次方程組,這個方程組有N+1個方程,求解這個方程,就能夠獲得全部的N+1個未知的θ

    

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

 

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

    矩陣法比代數法要簡潔,且矩陣運算能夠取代循環,因此如今不少書和機器學習庫都是用的矩陣法來作最小二乘法。

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

    

    假設函數hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn

的矩陣表達方式爲:

     hθ(x)=Xθ

 

    其中, 假設函數hθ(X)

爲mx1的向量,θ爲nx1的向量,裏面有n個代數法的模型參數。X

爲mxn維的矩陣。m表明樣本的個數,n表明樣本的特徵數。

    損失函數定義爲J(θ)=12(XθY)T(XθY)

 

    其中Y

是樣本的輸出向量,維度爲mx1. 12

在這主要是爲了求導後係數爲1,方便計算。

    根據最小二乘法的原理,咱們要對這個損失函數對θ

向量求導取0。結果以下式:

    θJ(θ)=XT(XθY)=0

 

    這裏面用到了矩陣求導鏈式法則,和兩個矩陣求導的公式。

      公式1:X(XXT)=2X

 

      公式2:θ(Xθ)=XT

 

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

    XTXθ=XTY

 

    兩邊同時左乘(XTX)1

可得:

    θ=(XTX)1XTY

 

    這樣咱們就一會兒求出了θ

向量表達式的公式,免去了代數法一個個去求導的麻煩。只要給了數據,咱們就能夠用θ=(XTX)1XTY算出θ

 

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

    從上面能夠看出,最小二乘法適用簡潔高效,比梯度降低這樣的迭代法彷佛方便不少。可是這裏咱們就聊聊最小二乘法的侷限性。

    首先,最小二乘法須要計算XTX

的逆矩陣,有可能它的逆矩陣不存在,這樣就沒有辦法直接用最小二乘法了,此時梯度降低法仍然可使用。固然,咱們能夠經過對樣本數據進行整理,去掉冗餘特徵。讓XTX

的行列式不爲0,而後繼續使用最小二乘法。

    第二,當樣本特徵n很是的大的時候,計算XTX

的逆矩陣是一個很是耗時的工做(nxn的矩陣求逆),甚至不可行。此時以梯度降低爲表明的迭代法仍然可使用。那這個n到底多大就不適合最小二乘法呢?若是你沒有不少的分佈式大數據計算資源,建議超過10000個特徵就用迭代法吧。或者經過主成分分析下降特徵的維度後再用最小二乘法。

    第三,若是擬合函數不是線性的,這時沒法使用最小二乘法,須要經過一些技巧轉化爲線性才能使用,此時梯度降低仍然能夠用。

    第四,講一些特殊狀況。當樣本量m不多,小於特徵數n的時候,這時擬合方程是欠定的,經常使用的優化方法都沒法去擬合數據。當樣本量m等於特徵數n的時候,用方程組求解就能夠了。當m大於n時,擬合方程是超定的,也就是咱們經常使用與最小二乘法的場景了。

相關文章
相關標籤/搜索