目前爲止,我們探討了單變量/特徵的迴歸模型,現在我們對房價模型增加更多的特徵,例如房間數樓層等,構成一個含有多個變量的模型,模型中的特徵爲(,,…,)。
增添更多特徵後,我們引入一系列新的註釋:
代表特徵的數量
代表第 個訓練實例,是特徵矩陣中的第 行,是一個向量(vector)。
比方說,上圖的
代表特徵矩陣中第 行的第 個特徵,也就是第 個訓練實例的第 個特徵。
如上圖的,
,
支持多變量的假設 表示爲:,(x)=+++…+。
這個公式中有個參數和個變量,爲了使得公式能夠簡化一些,引入,則公式轉化爲:(x)=+++…+
此時模型中的參數是一個維的向量,任何一個訓練實例也都是維的向量,特徵矩陣X的維度是 。 因此公式可以簡化爲:,其中上標代表矩陣轉置。
多變量梯度下降
與單變量線性迴歸類似,在多變量線性迴歸中,我們也構建一個代價函數,則這個代價函數是所有建模誤差的平方和,即: ,
其中: =+++…+,
我們的目標和單變量線性迴歸問題中一樣,是要找出使得代價函數最小的一系列參數。 多變量線性迴歸的批量梯度下降算法爲:
Python 代碼:
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
梯度下降法實踐1-特徵縮放
在我們面對多維特徵問題的時候,我們要保證這些特徵都具有相近的尺度,這將幫助梯度下降算法更快地收斂。
以房價問題爲例,假設我們使用兩個特徵,房屋的尺寸和房間的數量,尺寸的值爲 0-2000平方英尺,而房間數量的值則是0-5,以兩個參數分別爲橫縱座標,繪製代價函數的等高線圖能,看出圖像會顯得很扁,梯度下降算法需要非常多次的迭代才能收斂。
解決的方法是嘗試將所有特徵的尺度都儘量縮放到-1到1之間。如圖:
梯度下降法實踐2-學習率
梯度下降算法收斂所需要的迭代次數根據模型的不同而不同,我們不能提前預知,我們可以繪製迭代次數和代價函數的圖表來觀測算法在何時趨於收斂。
也有一些自動測試是否收斂的方法,例如將代價函數的變化值與某個閥值(例如0.001)進行比較,但通常看上面這樣的圖表更好。
梯度下降算法的每次迭代受到學習率的影響,如果學習率過小,則達到收斂所需的迭代次數會非常高;如果學習率過大,每次迭代可能不會減小代價函數,可能會越過局部最小值導致無法收斂。
通常可以考慮嘗試些學習率