機器學習 最小二乘法

最小二乘法小結

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

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

    最小二乘法是由勒讓德在19世紀發現的,原理的一般形式很簡單,當然發現的過程是非常艱難的。形式如下式:

目標函數=∑(觀測值−理論值)2目標函數=∑(觀測值−理論值)2

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

    (x(1),y(1)),(x(2),y(2),...(x(m),y(m))(x(1),y(1)),(x(2),y(2),...(x(m),y(m))

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

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

    這樣我們的樣本有一個特徵x,對應的擬合函數有兩個參數θ0和θ1θ0和θ1需要求出。

    我們的目標函數爲:

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

    用最小二乘法做什麼呢,使J(θ0,θ1)J(θ0,θ1)最小,求出使J(θ0,θ1)J(θ0,θ1)最小時的θ0和θ1θ0和θ1,這樣擬合函數就得出了。

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

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

    上面提到要使J(θ0,θ1)J(θ0,θ1)最小,方法就是對θ0和θ1θ0和θ1分別來求偏導數,令偏導數爲0,得到一個關於θ0和θ1θ0和θ1的二元方程組。求解這個二元方程組,就可以得到θ0和θ1θ0和θ1的值。下面我們具體看看過程。

    J(θ0,θ1)對θ0J(θ0,θ1)對θ0求導,得到如下方程:

    ∑i=1m(y(i)−θ0−θ1x(i))=0∑i=1m(y(i)−θ0−θ1x(i))=0                                  ①

    J(θ0,θ1)對θ1J(θ0,θ1)對θ1求導,得到如下方程:

    ∑i=1m(y(i)−θ0−θ1x(i))x(i)=0∑i=1m(y(i)−θ0−θ1x(i))x(i)=0         ②

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

    

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

 

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

 

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

    擬合函數表示爲 hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxnhθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn, 其中θiθi (i = 0,1,2... n)爲模型參數,xixi (i = 0,1,2... n)爲每個樣本的n個特徵值。這個表示可以簡化,我們增加一個特徵x0=1x0=1 ,這樣擬合函數表示爲:

    hθ(x0,x1,...xn)=∑i=0nθixihθ(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)i−y(j))2J(θ0,θ1...,θn)=∑j=1m(hθ(x0(j)),x1(j),...xn(j)))−y(j)))2=∑j=1m(∑i=0nθixi(j)−y(j))2

    利用損失函數分別對θiθi(i=0,1,...n)求導,並令導數爲0可得:

    ∑j=0m(∑i=0n(θix(j)i−y(j))x(j)i∑j=0m(∑i=0n(θixi(j)−y(j))xi(j) = 0   (i=0,1,...n)

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

    

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

 

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

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

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

    

    假設函數hθ(x1,x2,...xn)=θ0+θ1x1+...+θn−1xn−1hθ(x1,x2,...xn)=θ0+θ1x1+...+θn−1xn−1的矩陣表達方式爲:

     hθ(x)=Xθhθ(x)=Xθ 

    其中, 假設函數hθ(X)hθ(X)爲mx1的向量,θθ爲nx1的向量,裏面有n個代數法的模型參數。XX爲mxn維的矩陣。m代表樣本的個數,n代表樣本的特徵數。

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

    其中YY是樣本的輸出向量,維度爲mx1. 1212在這主要是爲了求導後係數爲1,方便計算。

    根據最小二乘法的原理,我們要對這個損失函數對θθ向量求導取0。結果如下式:

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

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

      公式1:∂∂x(xTx)=2xx爲向量∂∂x(xTx)=2xx爲向量

      公式2:∇Xf(AX+B)=AT∇Yf,Y=AX+B,f(Y)爲標量∇Xf(AX+B)=AT∇Yf,Y=AX+B,f(Y)爲標量

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

    XTXθ=XTYXTXθ=XTY

    兩邊同時左乘(XTX)−1(XTX)−1可得:

    θ=(XTX)−1XTYθ=(XTX)−1XTY

    這樣我們就一下子求出了θθ向量表達式的公式,免去了代數法一個個去求導的麻煩。只要給了數據,我們就可以用θ=(XTX)−1XTYθ=(XTX)−1XTY算出θθ。

 

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

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

    首先,最小二乘法需要計算XTXXTX的逆矩陣,有可能它的逆矩陣不存在,這樣就沒有辦法直接用最小二乘法了,此時梯度下降法仍然可以使用。當然,我們可以通過對樣本數據進行整理,去掉冗餘特徵。讓XTXXTX的行列式不爲0,然後繼續使用最小二乘法。

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

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

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

 

轉載:https://www.cnblogs.com/pinard/p/5976811.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章