線性迴歸之最小二乘法

線性迴歸之最小二乘法

1.最小二乘法的原理

最小二乘法的主要思想是通過確定未知參數\(\theta\)(通常是一個參數矩陣),來使得真實值和預測值的誤差(也稱殘差)平方和最小,其計算公式爲\(E=\sum_{i=0}^ne_i^2=\sum_{i=1}^n(y_i-\hat{y_i})\),其中\(y_i\)是真實值,\(\hat{y_i}\)是對應的預測值。如下圖所示(來源於維基百科,Krishnavedala的作品),就是最小二乘法的一個示例,其中紅色爲數據點,藍色爲最小二乘法求得的最佳解,綠色即爲誤差。

圖1

圖1

圖中有四個數據點分別爲:(1, 6), (2, 5), (3, 7), (4, 10)。在線性迴歸中,通常我們使用均方誤差來作爲損失函數,均方誤差可以看作是最小二乘法中的E除以m(m爲樣本個數),所以最小二乘法求出來的最優解就是將均方誤差作爲損失函數求出來的最優解。對於圖中這些一維特徵的樣本,我們的擬合函數爲\(h_\theta(x)=\theta_0+\theta_1x\),所以損失函數爲 \[J(\theta_0,\theta_1)=\sum_{i=0}^m(y^{(i)}-h_\theta(x^{(i)}))^2=\sum_{i=0}^m(y^{(i)}-\theta_0-\theta_1x^{(i)})^2\](這裏損失函數使用最小二乘法,並非均方誤差),其中上標(i)表示第i個樣本。

2.最小二乘法求解

要使損失函數最小,可以將損失函數當作多元函數來處理,採用多元函數求偏導的方法來計算函數的極小值。例如對於一維特徵的最小二乘法,\(J(\theta_0,\theta_1)\)分別對\(\theta_0\)\(\theta_1\)求偏導,令偏導等於0得:

\[\frac{\partial J(\theta_0,\theta_1)}{\partial\theta_0}=-2\sum_{i=1}^{m}(y^{(i)}-\theta_0-\theta_1x^{(i)}) = 0\tag{2.1}\]

\[\frac{\partial J(\theta_0,\theta_1)}{\partial\theta_1}=-2\sum_{i=1}^{m}(y^{(i)}-\theta_0-\theta_1x^{(i)})x^{(i)} = 0\tag{2.2}\]

聯立兩式,求解可得:

\[\theta_0 =\frac{\sum_{i=1}^m(x^{(i)})^2\sum_{i=1}^my^{(i)}-\sum_{i=1}^mx^{(i)}\sum_{i=1}^mx^{(i)}y^{(i)}}{m\sum_{i=1}^m(x^{(i)})^2-\sum_{i=1}^mx^{(i)}(\sum_{i=1}^mx^{(i)})^2} \tag{2.3}\]

\[\theta_1 =\frac{m\sum_{i=1}^mx^{(i)}y^{(i)}-\sum_{i=1}^mx^{(i)}\sum_{i=1}^my^{(i)}}{m\sum_{i=1}^m(x^{(i)})^2-\sum_{i=1}^mx^{(i)}(\sum_{i=1}^mx^{(i)})^2} \tag{2.4}\]

對於圖1中的例子,代入公式\((2.3)\)\((2.4)\)進行結算得,\(\theta_0 = 3.5, \theta_1=1.4,J(\theta) = 4.2\)

對於n維特徵的樣本,同樣可以採用這種方式來求解。對於特徵維度\((x_1,x_2, \cdots,x_n)\),我們增加一個第0維\(x_0=1\),這樣增廣特徵向量\(x = (x_0,x_1,\cdots,x_n)\),增廣權向量爲\(\theta = (\theta_0, \theta_1,\dots,\theta_n)\).

此時我們的擬合函數變爲:

\[ h_\theta(x) = \sum_{i=0}^n\theta_ix_i =\theta_0+ \theta_1x_1 + \cdots+\theta_nx_n \]

損失函數變爲:

\[J(\theta)=\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2=\sum_{j=1}^m(\sum_{i=0}^n\theta_ix_i^{(j)}-y^{(j)})^2\]

損失函數\(J(\theta)\)分別對\(\theta_i(i=0,1,\dots,n)\)求偏導,得:

\[\frac{\partial J(\theta)}{\partial\theta_i} = 2\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})x^{(j)}=2\sum_{j=1}^m(\sum_{i=0}^n\theta_ix_i^{(j)}-y^{(j)})x^{(j)}\quad (i=0,1,\dots,n) \]

令偏導等於0,則有:

\[\sum{j=1}^m(\sum{i=0}^n\theta_ix_i^{(j)}-y^{(j)})x^{(j)}=0\quad (i=0,1,\dots,n) \]

這樣最終得到的結果就是一個線性方程組,未知數的個數爲n+1,方程的個數也爲n+1,這樣就可以通過高斯消元法解出\(\theta_i(i=0,1,\dots,n)\),具體可參見:詳解最小二乘法原理和代碼

對於線性迴歸問題,我們可以依據擬合函數的形式進行特徵空間變換,即廣義線性迴歸。例如,\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2^2\),我們可以令\(x_2:=x_2^2\),這裏\(:=\)表示賦值,即將右邊的值賦給左邊。這樣又變成了我們所熟悉的擬合函數形式。

對於非線性迴歸問題,最小二乘法的思想同樣適用,只不過函數形式有所變化。例如,對於擬合函數\(h_\theta(x)=\theta_0+\theta_1x+\theta_2l nx\),此時\(J(\theta)=\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2\),求偏導的結果爲:

\[\frac{\partial J(\theta)}{\partial\theta_i}=2\sum_{j=1}^{m}(h_\theta(x^{(j)})-y^{(j)})\frac{\partial h_\theta(x)}{\theta_i}\quad (i=0,1,2);其中\frac{\partial h_\theta(x)}{\theta_0} = 1, \frac{\partial h_\theta(x)}{\theta_2} = x, \frac{\partial h_\theta(x)}{\theta_2} = lnx\]

同樣可以構造線性方程組,用高斯消元法求解。

3.矩陣求解最小二乘法

對於函數\(ℎ_𝜃(x)=𝜃_0+𝜃_1𝑥_1+\dots+𝜃_𝑛𝑥_𝑛\),我們將其用矩陣表示爲:

\[X\theta = Y \qquad \tag{3.1}\]

其中,

\[X = \left\{\begin{matrix} (x^{(1)})^T \\ (x^{(2)})^T \\ \vdots \\(x^{(m)})^T \end{matrix} \right\} , Y = \left\{\begin{matrix} y^{(1)} \\ y^{(2)} \\ \vdots \\y^{(m)}) \end{matrix} \right\},x^{(j)}=\left\{\begin{matrix} x_0^{(j)}) \\ x_1^{(j)} \\ \vdots \\ x_n^{(j)} \end{matrix} \right\}, \theta = \left\{\begin{matrix} \theta_0 \\ \theta_1 \\ \vdots \\ \theta_n \end{matrix} \right\}\]

m表示樣本個數,n爲特徵維度,\(x_0^{(i)}=1\quad(i = 0,1,\dots,m)\),即\(X\)的第一列全爲1,\(x_i^{(j)}\)表示第j個樣本的第i個特徵,\(X\)爲增廣樣本矩陣((1+n)*m維),\(Y\)爲真實值組成的列向量。

損失函數表示爲:

\[J(\theta)=\sum_{j=1}^m(h_\theta(x^{(j)})-y^{(j)})^2=(X\theta−Y)^T(X\theta−Y) \tag{3.2}\]

根據最小二乘法,利用矩陣求導得:(具體推導參見線性迴歸矩陣推導線性迴歸相關向量求導

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

令求導結果等於0矩陣,可得:

\[X^TX\theta = X^TY\quad\Rightarrow \quad \theta = (X^TX)^{-1}X^TY \tag{3.3}\]

對於圖1中的例子,利用公式\((3.3)\)計算得:\(\theta = \left\{\begin{matrix} 3.5 \\1.4\end{matrix} \right\}\)

4.總結

最小二乘法可以直接求解參數矩陣,在計算時可以直接套入公式。但是仍有一定的侷限性,主要體現在:

1.\(X^TX\)的逆矩陣可能不存在,這個在Matlab中,可以通過求僞逆來進行計算。

2.對於\((3.1)\)式,可以將其看成一個線性方程組(假設各方程線性無關)。如果樣本個數m小於特徵維數n,那麼此方程組有無窮多個解。如果m = n,有唯一解。如果m大於n,無解(即存在矛盾解)。最小二乘法一般是在m大於n的時候使用,此時求出來的解是最優近似解。

3.最小二乘法的時間複雜度爲\(O(n^3)\),當n特別大的時候(一般大於10000),求逆矩陣的過程非常複雜。此時採用最小二乘法,會非常耗時。

參考鏈接:

最小二乘法小結

半小時學習最小二乘法

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