最小二乘法的主要思想是經過肯定未知參數\(\theta\)(一般是一個參數矩陣),來使得真實值和預測值的偏差(也稱殘差)平方和最小,其計算公式爲\(E=\sum_{i=0}^ne_i^2=\sum_{i=1}^n(y_i-\hat{y_i})\),其中\(y_i\)是真實值,\(\hat{y_i}\)是對應的預測值。以下圖所示(來源於維基百科,Krishnavedala的做品),就是最小二乘法的一個示例,其中紅色爲數據點,藍色爲最小二乘法求得的最佳解,綠色即爲偏差。html
圖中有四個數據點分別爲:(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個樣本。git
要使損失函數最小,能夠將損失函數看成多元函數來處理,採用多元函數求偏導的方法來計算函數的極小值。例如對於一維特徵的最小二乘法,\(J(\theta_0,\theta_1)\)分別對\(\theta_0\),\(\theta_1\)求偏導,令偏導等於0得:github
\[\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}\]less
\[\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}\]spa
\[\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}\].net
對於圖1中的例子,代入公式\((2.3)\)和\((2.4)\)進行結算得,\(\theta_0 = 3.5, \theta_1=1.4,J(\theta) = 4.2\)。htm
對於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)\).blog
此時咱們的擬合函數變爲:
\[ 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\]
一樣能夠構造線性方程組,用高斯消元法求解。
對於函數\(ℎ_𝜃(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\}\)
最小二乘法能夠直接求解參數矩陣,在計算時能夠直接套入公式。可是仍有必定的侷限性,主要體如今:
1.\(X^TX\)的逆矩陣可能不存在,這個在Matlab中,能夠經過求僞逆來進行計算。
2.對於\((3.1)\)式,能夠將其當作一個線性方程組(假設各方程線性無關)。若是樣本個數m小於特徵維數n,那麼此方程組有無窮多個解。若是m = n,有惟一解。若是m大於n,無解(即存在矛盾解)。最小二乘法通常是在m大於n的時候使用,此時求出來的解是最優近似解。
3.最小二乘法的時間複雜度爲\(O(n^3)\),當n特別大的時候(通常大於10000),求逆矩陣的過程很是複雜。此時採用最小二乘法,會很是耗時。
參考連接: