Normal Equations


Normal Equations 的由來

假設我們有m個樣本。特征向量的維度為n。因此,可知樣本為{(x(1),y(1)), (x(2),y(2)),... ..., (x(m),y(m))},其中對於每一個樣本中的x(i),都有x(i)={x1(i), xn(i),... ...,xn(i)}。令 H(θ)=θ0 + θ1x12x2 +... + θnxn,則有

若希望H(θ)=Y,則有

X · θ = Y

我們先來回憶一下兩個概念:單位矩陣 矩陣的逆,看看它們有什么性質。

(1)單位矩陣E

AE=EA=A

(2)矩陣的逆A-1

要求:A必須為方陣

性質:AA-1=A-1A=E

再來看看式子 X · θ = Y

若想求出θ,那么我們需要做一些轉換:

step1:先把θ左邊的矩陣變成一個方陣。通過乘以XT可以實現,則有

XTX · θ = XTY

step2:把θ左邊的部分變成一個單位矩陣,這樣就可以讓它消失於無形了……

(XTX)-1(XTX) · θ = (XTX)-1XTY

step3:由於(XTX)-1(XTX) = E,因此式子變為

Eθ = (XTX)-1XTY

E可以去掉,因此得到

θ = (XTX)-1XTY

這就是我們所說的Normal Equation了。

 

Normal Equation VS Gradient Descent

Normal Equation 跟 Gradient Descent(梯度下降)一樣,可以用來求權重向量θ。但它與Gradient Descent相比,既有優勢也有劣勢。

優勢:

Normal Equation可以不在意x特征的scale。比如,有特征向量X={x1, x2}, 其中x1的range為1~2000,而x2的range為1~4,可以看到它們的范圍相差了500倍。如果使用Gradient Descent方法的話,會導致橢圓變得很窄很長,而出現梯度下降困難,甚至無法下降梯度(因為導數乘上步長后可能會沖出橢圓的外面)。但是,如果用Normal Equation方法的話,就不用擔心這個問題了。因為它是純粹的矩陣算法。

劣勢:

相比於Gradient DescentNormal Equation需要大量的矩陣運算,特別是求矩陣的逆。在矩陣很大的情況下,會大大增加計算復雜性以及對計算機內存容量的要求。

 

什么情況下會出現Normal Equation,該如何應對?

(1)當特征向量的維度過多時(如,m <= n 時)

 解決方法:① 使用regularization方式

     or ②delete一些特征維度

(2)有redundant features(也稱為linearly dependent feature)

例如, x1= size in feet2

    x2 = size in m2

    feet和m的換算為 1m≈3.28feet所以,x1 ≈ 3.282 * x2, 因此x1和x2是線性相關的(也可以說x1和x2之間有一個是冗余的)

解決方法:找出冗余的特征維度,刪除之。

 

練習

練習的介紹頁面見Ng的openclassroom  Exercise: Multivariate Linear Regression

下載頁面上的數據,然后載入matlab中。

y(i)表示價格,x(i)表示房屋面積和房間數:

樣本數m=47。

step1:對數據進行預處理

給每一個x向量,都增加一個x0=1的分量。

m = 47;
x=[ones(m,1),ex3x];

查看x矩陣:

step2:帶入normal equation公式θ = (XTX)-1XTY,求解權重向量。

 y=ex3y;
 theta = inv(x'*x)*x'*y;

求得θ向量為

如果我想預計“1650-square-foot house with 3 bedrooms”的價格,那么由X * θ = Y可知:

price = [1,1650,3]* theta ;

我們取消matlab中的科學計數法,看看price的價格是多少:

>> format long g
>> price

price =  293081.464334897

我們在給出的樣本中,找一個接近的樣本比比看:

23號樣本的房屋面積為1604,房間數也為3,它的價格為

我們可以嘗試畫出H(θ)函數的圖像看看:

先分別用min和max函數找出房屋面積(x1)和房間個數(x2)的最大和最小值,有

x1∈[852,4478]

x2∈[1,5]

x1=linspace(852,4478,47);
x2=linspace(1,5,47);
[xx1,xx2]=meshgrid(x1,x2);
h_theta = theta(1)*ones(47,47) + theta(2)*xx1 + theta(3)*xx2;
surf(xx1,xx2,h_theta);

可以看到H(θ)為如下平面:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM