吳恩達(dá)機(jī)器學(xué)習(xí)筆記-多元線性回歸

之前的文章中已經(jīng)講述了簡單的一元線性回歸的基礎(chǔ)知識,現(xiàn)在我們來繼續(xù)討論多元線性回歸。本文針對吳恩達(dá)機(jī)器學(xué)習(xí)第二周課程多元線性回歸部分。

假設(shè)函數(shù)

所謂多元線性回歸正如其名字一樣,就是說這里的變量是多個的,下面介紹一下如何表示含有多個變量情況下的假設(shè)函數(shù):
h_\theta(x) = \theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+...+\theta_nx_n
之前的一元線性回歸中有變量x^(i)表示i個訓(xùn)練樣本的特征值,現(xiàn)在由于有多個變量,因此我們用x_j^(i)表示第i個訓(xùn)練樣本的特征j的值,用x^(i)表示第i個訓(xùn)練樣本的所有特征,m表示訓(xùn)練集的大小,n表示特征的數(shù)量。為了更好的理解這個函數(shù),我們可以舉個房價的例子:想象\theta_0是房子的基礎(chǔ)價格,\theta_1表示單位面積的房價,\theta_2表示每一層的房價,以此類推,則x_1表示房子的面積,x_2表示房子的樓層數(shù)等等。
使用矩陣的定義我們可以更簡潔的表達(dá)出假設(shè)函數(shù),這里我們假設(shè)x_0^i=1(i\in1,2,...m),這使得我們可以很方便的進(jìn)行\theta,x的矩陣運(yùn)算。
h_\theta(x) = \begin{bmatrix} \theta_0 & \theta_1 & ... & \theta_n \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ ... \\ x_n \end{bmatrix} = = \theta^Tx

梯度下降

同樣的,針對多遠(yuǎn)線性回歸的梯度下降算法的公式肯定也會不同,我們這里只需要補(bǔ)充上需要重復(fù)的n個特征量即可:
repeat until convergence:{
\theta_0 := \theta_0 - \alpha \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^(i))-y^(i))x_0^(i)

\theta_1 := \theta_1 - \alpha \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^(i))-y^(i))x_1^(i)

\theta_2 := \theta_2 - \alpha \frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^(i))-y^(i))x_2^(i)
...
\theta_j := \theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^(i))-y^(i))x_j^(i)\quad j:=0,1...n
}

當(dāng)然,這里也不要忘了,\theta_0,\theta_1... \theta_j是同步更新的。

特征縮放

那么現(xiàn)在如果有一個問題包含了多個特征,比如說上面的房價問題,我們先假設(shè)有兩個特征:
x_1 = 房子面積(0-200平米)\\ x_2 = 房間數(shù)量(1-5)
那么我們畫出的代價函數(shù)輪廓圖圖像可能就是相對比較細(xì)長,那么我們通過梯度下降去尋找最小值的時候需要花很長時間才能走到終點(diǎn),并且可能會來回波動,如下圖所示:

避免這種情況的方法就是想辦法將我們的變量范圍縮小到一個合適且相近的范圍,一般來說定義到[-1,1]或者[-0.5,0.5]。如何縮小到這個范圍呢,我們可以使用下面這個公式:
x_i := \frac{x_i-\mu_i}{s_i}
其中\mu_i表示該特征所有值的平均值,s_i表示該特征取值范圍(最大值減去最小值)或者標(biāo)準(zhǔn)差,在這個例子中假設(shè)你的房子面積為110,房間為3,我們可以得出:
x_1 := \frac{110-平均面積(假設(shè)為100)}{200} = 0.05\\ x_2 := \frac{3-平均每戶房子包含的房間數(shù)(假設(shè)為2)}{4} = 0.25
兩個變量都是在[-0.5,0.5]之間,從而我們畫出的輪廓圖可能就會相對較圓一點(diǎn):

這樣我們梯度下降到最小值點(diǎn)的速度就會相對較快一點(diǎn)。我們這里用的方法就叫做特征縮放(Feature Scaling)。

學(xué)習(xí)速率

上一篇我們有說過學(xué)習(xí)速率的取值會影響到梯度下降的效率和準(zhǔn)確性,取值太小會導(dǎo)致梯度下降速度很慢,取值太大會導(dǎo)致梯度下降的時候直接越過最小值導(dǎo)致無法收斂。
\theta_j := \theta_j - \frac{\partial}{\partial\theta_j}J(\theta)
那么我們這里就講講如何對α進(jìn)行取值,首先畫出代價函數(shù)J(\theta)的圖像,x軸表示梯度下降算法的迭代步數(shù),注意這里和之前的橫軸表達(dá)的意思不一樣,之前一般是用來表示參數(shù)\theta,縱軸表示J(\theta)的值。簡單的說就是這個圖像表示了我們梯度下降迭代了多少步后對應(yīng)的代價函數(shù)的值。

那么也就是說,如果梯度下降算法是正常工作的,那這個圖像就應(yīng)該是一直處于下降狀態(tài)的。圖中的曲線到400步的時候已經(jīng)趨于平坦,即已經(jīng)基本收斂了。因此這條曲線可以用來判斷梯度下降算法是否已經(jīng)收斂。有時候也可以進(jìn)行一些自動的收斂測試,比如如果發(fā)現(xiàn)代價函數(shù)的下降小于一個很小的值那么就可以看作為已經(jīng)收斂如10^-3,但選擇這個閾值往往只很困難的,因此大部分情況下還是要通過查看這個曲線圖來判斷是否收斂。
至于梯度下降運(yùn)行不正確的情況下的圖像就可能有如下幾種情況:

1
1
2
2

3
3

第一張圖圖像是一直往上升的方向去的,明顯是錯誤的運(yùn)行狀況。第二張和第三張說明你的α取值偏大了一點(diǎn),需要取小一點(diǎn)試試。對于真正的有效的α,
J(\theta)
應(yīng)當(dāng)每一步都在遞減,但如果α太小了,之前說過,梯度下降的速度會很慢。

多項(xiàng)式回歸

以上我們已經(jīng)大致了解了多項(xiàng)式回歸,那這里我們先談?wù)勅绾芜x擇特征。比如說上面的房子問題,我們可以選房子的長和寬當(dāng)做兩個特征x_1,x_2來看,但這只是一種想法,其實(shí)我們也可以把房子的面積x_1*x_2來當(dāng)做特征,這樣我們只使用了這一個特征,這取決于你從什么樣的角度去審視這個問題,通過定義一個新的特征,我們有時候可能會得到一個更好的模型。
與選擇特征相關(guān)的一個概念,被稱作多項(xiàng)式回歸(polynomial regression)。我們還是用房價的例子,我們一開始用的可能是一次函數(shù)去模擬這個數(shù)據(jù)集的情況,但嘗試了之后發(fā)現(xiàn)可能一次函數(shù)不足以模擬出實(shí)際情況。二次函數(shù)很顯然不行,房價會有下降的趨勢,房價不可能達(dá)到一定高度后又下降回來,那這里就可以嘗試使用三次函數(shù),比如:
h_\theta(x) = \theta_0+\theta_1x_1+\theta_2x_1^2+\theta_3x_1^3
這里第一個特征x_1設(shè)為房子的面積,第二個特征為房子面積的平方x_2 = x_1^2,第三個為房子面積的立方x_3 = x_1^3。最終將這個三次函數(shù)擬合到我們的數(shù)據(jù)上。但我們現(xiàn)在用這樣的方式選擇特征的話,三個特征的范圍的差距就會很大,假設(shè)房子面積[1,100],那么x_1\in[1,100],x_2\in[1,100^2],x_3\in[1,100^3]。那么如果使用梯度下降法的話,特征值的歸一化就很重要,即將不同類型的特征數(shù)值大小變?yōu)橐恢隆D沁@里就不適用三次函數(shù)的模型,我們試試平方根函數(shù),我們可以假設(shè)模型為h_\theta(x) = \theta_0+\theta_1x_1+\theta_2\sqrt x_1,平方根函數(shù)也是一個遞增的函數(shù),而且遞增速度會越來越趨于平緩,可能與我們的數(shù)據(jù)更為契合。

可能在選擇特征的這個問題上經(jīng)常難以抉擇,再后面的內(nèi)容中我們會繼續(xù)討論一些算法,他們能自動選擇要使用什么特征,因此可以使用某一個算法觀察數(shù)據(jù),決定最終使用什么函數(shù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容