到目前爲止,咱們一直在使用梯度降低法來求解(經過一步步迭代來收斂到全局最小值)。相反地,正規方程提供的一種求解θ的解法。因此咱們再也不須要運行迭代算法,而是能夠直接一次性求解θ的最優值。算法
事實上,正規方程也有優勢,也有一些缺點。但在講它的優缺點和如何使用正規方程以前,讓咱們先對這個算法有一個直觀的理解。下面咱們來看一個例子。函數
咱們假設有一個很是簡單的代價函數J(θ)。它就是一個實數θ的函數。因此如今假設θ只是一個標量,或者只是一個實數值,而函數是θ的二次函數。因此它的圖像以下所示。學習
那麼,怎麼最小化一個二次函數呢?咱們知道,咱們能夠對函數進行求導並讓導數值爲0。這樣,咱們就會求得使J(θ)最小的θ值。這是θ爲實數的一個簡單的例子。可是,咱們一般碰到的問題中,θ不是一個實數,而是一個n+1維的參數向量,代價函數J是這個向量的函數,也就是θ0,θ1,θ2,……θn的函數。(J(θ0,θ1,……θn)=(1/2m)Σ(hθ(xi)-yi)2) [Q1:這裏是m仍是n呢?首先,咱們要搞清楚n和m表明什麼。n表示特徵量的數目,m表示樣本的數量。]spa
咱們要如何最小化這個代價函數?設計
事實上,微積分告訴咱們有一個方法能作到:就是逐個對參數θj求J的偏導數,而後把它們所有置零。若是咱們這樣作,而且求出θ0,θ1,……θn的值。這樣就能獲得最小化代價函數J的值。若是你真的作完微積分,並求出θ0,θ1,……θn的值,這個偏微分最終可能很複雜。blog
下面讓咱們來看一個例子。假如如今有m=4個訓練樣本。數學
爲了實現正規方程法,咱們要作的就是在數據集中再加上一列,對應額外特徵變量的x0,它的取值永遠是1。接下來咱們要作的,就是構建一個矩陣X。這個矩陣包括了全部訓練樣本的全部特徵變量。咱們要對y值進行相似的操做。咱們取咱們想要預測的值,而後構建一個向量y。全部,X是一個m*(n+1)的矩陣,y是一個m維向量。最後,咱們用矩陣X和向量y計算θ值。設θ=(XTX)-1XTy,這樣咱們就能獲得使代價函數最小化的θ。table
在通常狀況下,假設如今有m個訓練樣本,從(x(1),y(1))一直到(x(m),y(m))和n個特徵變量。全部每一個訓練樣本x(i)多是一個以下所示的向量(一個n+1維特徵向量)。咱們接下來構建矩陣的方法也被稱爲設計矩陣。每一個訓練樣本都給出一個像下圖左側同樣的特徵向量,咱們要作的就是取第一個向量的轉置,而後讓第一個向量的轉置稱爲設計矩陣X的第一行。同理,一直取到第m個向量的轉置。變量
舉個具體的例子,假如咱們除了x0以外只有一個特徵變量,那麼咱們的設計矩陣X以下圖所示。方法
咱們就能獲得一個m*2維矩陣。這就是如何構建矩陣X。而向量y就是把全部結果放在一塊兒獲得一個m維向量。
最後構建好設計矩陣X和向量y以後,咱們就能夠計算θ=(XTX)-1XTy。
下面咱們就來說一下θ=(XTX)-1XTy這個式子。
(XTX)-1是XTX的逆矩陣。具體的說,若是令A=XTX(XT是一個矩陣,XTX也是一個矩陣),那麼(XTX)-1就是矩陣A的逆(A-1)。先計算XTX,再計算它的逆。
還記得咱們以前講過的特徵縮放嗎?事實上,若是咱們使用正規方程,咱們就不須要特徵縮放。若是你使用正規方程,即便你的特徵量的取值如0≤x1≤1,0≤x2≤1000,0≤x3≤0.00001,也沒有關係。可是,若是使用的是梯度降低法,特徵縮放就很是重要了。
假如咱們有m個訓練樣本,n個特徵變量。
梯度降低法 | 正規方程法 |
缺點: 1.須要選擇學習速率α。這一般表示要運行不少次來嘗試不一樣的學習速率α。 2.須要更屢次的迭代(取決於具體細節,計算可能會很慢)。 |
缺點: 正規方程法爲了求解參數θ須要求解 (XTX)-1,而 XTX是一個n*n的矩陣,對於大多數計算應用來講,實現逆矩陣的計算代價以矩陣維度的三次方增加(O(n3))。所以,若是特徵變量n的數目很大的話,計算這個逆矩陣的代價是很是大的。此時計算速度也會很是慢。 |
優勢: 1.梯度降低法在特徵變量不少的狀況下,也能運行地很好,即便有上百萬個特徵變量。 |
優勢: 1.不須要如今學習速率α,全部這就會很方便。 2.也不須要迭代,因此不須要畫出J(θ)的曲線來檢查收斂性,或者採起任何的額外步驟。 |
因此,若是n很大的話,使用梯度降低算法會比較好。若是n比較小的話,正規方程法可能會好一點。那麼,什麼算大什麼算小呢?
若是n是上萬的,那麼這個時候應用正規方程法的求解速度會開始變得有點慢,此時可能梯度降低法會好點(可是也不是絕對的)。若是n遠大於此,那麼這個時候使用梯度降低法會好點。