前面幾篇文章裡面我們介紹了求解線性回歸模型第一個算法 <code>梯度下降算法</code>,梯度下降算法最核心的是找到一個學習速率α,通過不斷的疊代最終找到θ0 ... θn, 使得J(θ)值最小。
今天我們要介紹一個解決線性回歸模型新的算法 <code>正規方程</code> 對于函數f(x) = ax^2 + bx + c 而言,要求其最小值,是對其求導數并且設定導數值為0.
我們知道,多元特征變量的線性回歸模型中,代價函數表達式,如下圖所示
擴充到n+1個參數θ0 ... θn,求函數J(θ)也可以對每個參數求導并另導數為0
經數學證明,運用線性代數的公式,可以直接求解特征向量θ(θ0,θ1 ... θn)使得代價函數J(θ)最小
X表示特征向量矩陣
X^T表示的是矩陣X的轉置矩陣
(X^T*X)^-1,表示矩陣X的轉置矩陣和它相乘得到的新的矩陣求逆
Y表示訓練集中,結果矩陣
假設我們預測房價的訓練集如下所示
訓練集m=4,特征次元n=4,同時我們假設X0=1,是以特征矩陣X=m*(n+1)
證明如下
X = m*(n+1)
X^T = (n+1)*m
(X^T * X) = (n+1) * (n+1)
(X^T * X)^-1 = (n+1) * (n+1)
Y = m * 1
X^T * Y = (n+1) * 1
(X^T * X)^-1 * X^T * Y = ((n+1) * (n+1)) * ((n+1) * 1) = (n+1) * 1
由上可知,求出的向量即為θ(θ0,θ1 ... θn)
<code>特别注意: 并不是所有(X^T * X)相乘的結果都可逆,不過我們一般不用太關心這些細節,對于MATLAB或者octave來說</code>無論可逆不可逆,最終都可以求出結果
梯度下降特點:
選擇合适的學習速率α
通過不斷的疊代,找到θ0 ... θn, 使得J(θ)值最小
正規方程特點:
不需要選擇學習速率α,不需要n輪疊代
隻需要一個公式計算即可
但是并不是所有的線性回歸都适合用正規方程,我們知道求解一個矩陣的逆複雜度為O(n^3),是以當特征次元n非常大的時候(X^T * X)^-1需要O(n^3)時間,此時選擇正規方程效率将會特别低
當n < 1000時候選擇正規方程比較合适,但是當n > 1000的時候使用梯度下降算法會是更佳的方案