1. 程式人生 > >吳恩達機器學習學習筆記第五章:多變數線性迴歸

吳恩達機器學習學習筆記第五章:多變數線性迴歸

1.Multiple features多特徵

現在我們有多個特徵了,比如還是預測房子價格X不僅僅是面積大小還有臥室數量,樓層數量以及房子的年齡

表達形式的記法:

n=4即有4個特徵(總面積 臥室數量 樓層數 房子年齡)

m=47即有47個樣本(47個房子)

x^(i)表示第i(i不是次方而是對應訓練集的索引)條樣本對的特徵 如x^(2)就是粉色的 這樣表示他就是一個四維向量

x^(i)j表示:如i=2 j=3就是紅圈

這裡的記號最好能很快反應過來 不然程式設計的時候會比較費時                                      

再來看看線性迴歸的假設函式

Eg是對這個圖Andrew老師把θ舉了個特值的例子:

(Eg是把引數θ取特值的例子)

(一個房子的基本價格是8千,每平方米0.1(百美元),……,-2x4即隨年度使用價錢貶值)

當然特徵個數為n時就如下了:                  

我們和單變數的做法一樣令他θ0的係數x^(i)0全部=1

所以現在X和θ都是一個n+1維向量 (黃圈)

那麼假設函式就可以寫成內積了(紅圈)

2.多元梯度下降法:

  假設函式、引數、代價函式書寫如下:

然後執行梯度下降

左邊是之前學的單變數 右邊是多變數其實本質是一樣的

因為我仍然是線性迴歸我沒有什麼二次項係數這種奇奇怪怪的東西,都是一次的所以θ1~θn求導結果的構造上都是一樣的

3.多元梯度下降法的特徵縮放:

如果你不同特徵之間的取值範圍差距很大 如面積是0~2000 而寢室數量是1~5

我們畫出來代價函式的等值線就會變成這種又長又扁的橢圓 這會極大的降低我們做梯度下降的速度 並且可能會導致來回波動的情況

針對這種情況我們就要做特徵縮放:

方法一是用特徵值除以範圍的最大值

這樣做以後等值線就沒有那麼偏移了 看起來更圓了

特徵範圍的設定沒有具體的要求,但是像-100~100、-0.0001~0.0001這種顯然就沒有-3~3、-2~0.5這種好 

方法二叫:均值歸一化(Mean normalization)

用X減去均值(μ)除以極差(max-min)

方法三:X減去均值除以標準差(就像標準正態分佈一樣) (正態分佈忘了的可以去找概率論、統計學的書看看)

4.多元梯度下降法的學習率:

如果學習率過大,J(θ)可能越來越大甚至不收斂,如果過小,J(θ)的迭代速率會很慢。

這些都是學習率過大的情況(影象的X軸是迭代次數 Y軸是J(θ)的值)

一般認定如果J(θ)迭代中下降到小於某一個值,例如10的負3次方,我們就說他收斂,不需要再進行繼續迭代了,但是這個下界不是那麼好選

如果我們的梯度下降沒有正常工作 那麼檢查學習率 併合理的修正學習率(用嘗試法:若小了就……0.001→0.01→0.1…… 若發現0.01小了 而0.1大了 就試試0.03……)

5.特徵和多項式迴歸

除了1階的這種線性迴歸我們還可以弄出2次方、3次方這樣的多項式迴歸

比如有寬度又有長度這兩個 那我們想把長度乘寬度=面積作為特徵去擬合我們的資料

對多項式迴歸 歸一化就非常重要了

6.正規方程

它是一種區別於迭代法用來求θ的直接解法,可以說只需要一步就能求出θ的最優值

對於這種θ是常數的例子直接求導令導數為0就能得到最優解

而下面的θ是n+1維向量,J(θ)是這個向量的函式

如果我對所有θj一個一個的做偏微分那就太蠢了

在樣本中加一列θ0=1 並寫出所有特徵向量Xi對應的矩陣 再把y寫出向量

X是一個m*(n+1)維矩陣 X也稱為設計矩陣(design matrix) 即把每一個訓練樣本

進行轉置後放到每一行

 y是一個m維向量 (m是訓練樣本數量 n是特徵變數個數)

就能得到使得代價函式最小化的θ

舉個具體的例子:

我的 除了 外只有一個特徵變數,

這樣的 就寫出了這樣的設計矩陣:

上面比較混亂。我們用筆再寫寫書寫表示方法

以及θ=XXXX那個公式線上性代數的證明(書寫較差盡情原諒)

梯度下降法與正規方程法的優缺點對比:

梯度下降法的缺點:

(1)需要選擇學習率a 也就意味著你需要執行多次去找哪個學習率是使執行效果最好的

(2)需要很多次迭代(運算速度就慢了)

梯度下降法的優點:

(1)不管特徵數量是幾千量級還是幾百萬量級,梯度下降法都能很好的工作

(2)除了線性迴歸(Linear Regreesion)外,其他複雜的演算法

正規方程法的優點:

(1)不需要自己找學習率a

(2)不需要迭代

(3)由於不需要找a不需要迭代所以就不需要畫J(θ) 的曲線去檢查收斂性了

(4)不需要進行特徵縮放(我的特徵變數x1是0~1 ,x2是-10000~10000這種都無所謂)

正規方程法的缺點:

(1)正規方程法一般用線上性迴歸上,不適用或者不能用在後續課程中講到的更復雜演算法

(2)當特徵變數太多時會導致運算速度很慢:

正規方程法的計算成本的時間複雜度是O(n^3)

因為 是一個n*n的矩陣(假設有n個特徵變數)而計算一個逆矩陣的複雜度是以矩陣維度的3次方增長的,就算一個很好的計算方法也是隻能做到接近n的3次方。這意味著當特徵很多的時候 所需要耗費的時間代價就很大了 一般來說n不大於10000計算機都可以勝任正規方程法 但是再往上走就會考慮梯度下降法了

7.正規方程在矩陣不可逆時的解決方法:

首先第一個出現不可逆的原因一般是X裡至少存在一組線性相關的特徵變數比如X1是平方米X2是英尺 1平米=3.28英尺

第二個原因是你有很多特徵具體的說就算m小於或等於n時,譬如說m=10 n=100 θ就算一個101維的向量 你要從10個訓練樣本中找到101個引數值,一般來說很難成功

當出現這種m小於n的情況我們考慮能否刪除一些特徵或者使用一種叫正則化(後面章節會講)的方法  

在數值計算這門課中

Python中有numpy.linalg的線性代數庫直接計算這種”偽逆”即:即使矩陣不可逆也能計算出他的逆:

inv(A)     計算方陣A的逆

pinv(A)    計算矩陣A的Moore-Penrose偽逆