吳恩達機器學習(三) 多變量線性迴歸與正規方程

1、多變量線性迴歸

一、一些符號

所謂多變量指的就是一個樣本有多個特徵,這多個特徵組成了一個特徵向量。例如,咱們描述一件事物須要描述其多個特徵才能肯定該事物,例如房子面積、房間數、層數等特徵,爲方便運算,咱們使用向量來表示。以下所示。算法

 

 

 

 

 

 

 

 

 

 

 

上圖表格中每一行是一個特徵向量。因爲特徵增多,須要增長一些符號。函數

 n:特徵數量。例如房子有面積、房間數、層數這三個特徵。學習

x(i):表示第i個樣本(特徵向量)。測試

x(i)j:第i個樣本的第j個特徵。字體

 二、假設函數

特徵增長以後,咱們的假設函數也變得複雜。咱們依舊假設函數是線性的,hθ(x) = θ0 + θ1x1 + θ2x2 + ... + θnxn。爲方便表示,咱們須要將其表示爲兩個向量的相乘。設置x0 = 1,獲得假設函數的向量表示,其中θ和x均爲列向量。這樣,假設函數即可表示爲hθ(x)  = θTx。因爲增長了x0 = 1,因此對應的θ向量也爲n+1維。spa

 

 

 

 

 

 

 

 

 

三、損失函數與梯度降低

與單變量線性迴歸同樣,咱們依舊使用歐氏距離表示預測值與實際值的差,獲得損失函數J(θ)3d

 

 

 

 

 

 

同理,咱們運用梯度降低算法來獲得極小值點。注意到下圖中只剩下一條式子,這是由於加入了x0 = 1,故不用特別表示出來了。orm

2、一些技巧

一、特徵縮放(Feature Scaling)

  • 問題:一個樣本中不一樣特徵的數值相差很大。例如,x1的範圍爲0~2000,而x2的範圍爲1~5,這樣形成的問題就是J(θ)的圖像會很扁平,而且在使用梯度降低算法求解θ1時會使得θ1稍微變化就使得J(θ)變化很大,形成震盪現象。
  • 解決:特徵縮放。
  • 具體作法:除咱們添加的x0,其餘特徵除以該特徵絕對值的最大值,這樣就使得所有特徵都在-1~1以內。

特徵縮放不只能解決震盪問題,還能加快梯度降低算法的收斂速度。值得注意的是,咱們不須要嚴格使得全部特徵均在-1~1範圍內,只要不一樣特徵的範圍接近便可。例如,x1的範圍是0~500,咱們將其縮小到0~1,而x2的範圍是-3~3,這是沒問題的,不須要對x2特徵縮放。記住,僅有一個原則,就是使得J(θ)在圖像上儘量地圓,不要太扁便可。blog

二、均值歸一化(Mean Normalization)

另外一種方法就是均值歸一化。具體作法是:求解每一個特徵的平均值和標準差(或最大值與最小值的差),而後全部樣本的的特徵減去對應特徵的平均值再除以對於特徵的標準差。ci

3、診斷(Debugging)

一、診斷算法是否正常工做

能夠畫出損失函數J(θ)隨着迭代次數的變化的曲線。因爲咱們的假設函數愈來愈擬合數據,因此每次迭代後J(θ)應該減少。咱們能夠本身觀察,若J(θ)在某個迭代次數(例如迭代400次)以後變化不大,那麼能夠認爲算法正常收斂了。也可使用自動測試的辦法,若J(θ)與前一次迭代的值相差小於等於10-3,那麼也能夠認爲算法收斂了,可是這個閾值其實很差肯定,故實際中仍是本身觀察爲主。

二、學習率α

若J(θ)以下圖①中那樣變化,緣由是α太大,致使θ越過最小值點,使得J(θ)一直增大;若如圖②那樣變化,緣由也是α太大,致使J(θ)反覆震盪。這兩種狀況的解決方法都是嘗試減少α,找到合適的α。

總的來講,若α太大就可能出現上述狀況,致使J(θ)收斂得很慢,甚至沒法收斂;但若是α過小,則會致使算法收斂的很慢,須要更屢次迭代才能收斂到最小值點。

關於α的選擇,須要在選好的幾個α中嘗試並畫出J(θ)的曲線,觀察選出最優的α。例如選擇0.01,0.03, 0.1,0.3等數值。

4、多項式迴歸(Polynomial Regression)

若樣本呈現的規律不是直線,而是曲線的話,就須要使用多項式來擬合數據。若須要擬合的曲線是hθ(x) = θ0 + θ1x + θ2x2 + θ3x3,咱們能夠轉化爲多變量線性迴歸問題,令x1 = x, x2 = x2, x3 = x3,這樣,假設函數就變成hθ(x) = θ0 + θ1x1 + θ2x2 + θ3x3,這就變成咱們熟悉的多變量線性迴歸問題了。

5、正規方程(Normal Equation)

一、正規方程求解過程

換個角度看問題,咱們以前是使用損失函數J(θ),用歐氏距離來度量預測值與實際值的差距,並經過梯度降低算法來逐漸求得θ。因此咱們的目的就是使得預測值與實際值儘量接近。這樣,對於某同樣本,咱們能夠令θTx(i) = y(i),解出該方程便可求得使得hθ(x)最符合實際值y(i)的θ了,同時也使得損失函數J(θ)最小(由於擬合了y(i)了)。按照這種思路,咱們對每個樣本創建方程,獲得方程組。故問題變爲求解這個方程組得出θ。有以下符號,X表示全部樣本,y表示實際值,X表示爲矩陣,y表示爲向量。

這樣獲得方程組 Xθ = y,兩邊左乘XT(乘以轉置矩陣主要是爲了獲得方陣XTX),便於求逆矩陣),再左乘以(XTX)-1,即可獲得

在octave(用matlab也行)使用pinv函數求逆矩陣,使用X'求轉置矩陣。在octave中只需上圖中藍色字體那一行代碼即可求得θ。

二、梯度降低與正規方程對比

正規方程求解十分便利,看起來彷佛不須要梯度降低算法求解θ了。其實他們各有優缺點,下表列出梯度降低與正規方程的對比。

梯度降低 正規方程
須要選擇學習率α 不須要選擇α
須要屢次迭代求解θ 不須要迭代,直接求出θ
即便特徵數量n很大也能很快求解 須要計算(XTX)-1,算法複雜度爲O(n3),當n很大時算法會比較慢

 

 

 

 

 

 

 

因此若每個樣本的特徵數很大(例如大於10000),則應該使用梯度降低算法來求解θ。

三、XTX不可逆怎麼辦

XTX不可逆時稱爲奇異矩陣(Singular)或退化矩陣(Degenerate)。

解決方法很簡單,在Octave中使用pinv命令時必定能求出逆矩陣(inv命令當矩陣不可逆時沒法求出)。

XTX不可逆的緣由主要時如下幾個緣由:

  • 存在線性相關的特徵。例如x1用平方英尺表示房屋面積,而x2用平方米表示面積,那麼x1與x2是線性相關的。解決方法是刪除某一個線性相關的某一特徵。
  • 特徵太多,致使樣本數m少於特徵數n。從線性代數的角度看,此時方程組未知變量比方程多,此時Xθ = y可能無解,也可能有無數解,可是毫不可能只有惟一解。解決方法手動刪除某些特徵使得m>n,或者使用正則化(XTX正則化以後一定可逆)。

相關文章
相關標籤/搜索