在上節中通過一個預測房價的例子給出了一個一次的假設函數:。而在實際情況中假設函數可能需要多個特徵(變量)x,因此在本節中將預測房價的例子進行些添加,從而引出多元線性迴歸函數,並對其中的參數進行分析,繼而給出梯度下降算法中的實用技巧以及正規方程的介紹。
1. 多元線性迴歸函數如何表達?
本例中,影響房價的特徵有多個,分別是房子大小、房間數量、樓層數以及房子已使用年限,這四個特徵共同影響房子的價值,給出的訓練集如下:
房子大小(平方英尺) | 房間數量 | 樓層數 | 房子已使用年限 | 房價 |
2104 |
5 |
1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
參數:
:樣本數量
:特徵數
:第i個樣本的特徵向量
:第i個樣本的第j個特徵值
原本的假設函數爲:
本例子的假設函數公式:
那麼推廣到一般假設函數公式爲:
爲了讓形式更加統一,我們可以令=1,從而一般假設函數公式爲:
令特徵和參數用向量表達爲:
那麼:
上式稱爲多元線性迴歸(Multivariate linear regression)。
2. 如何計算梯度下降算法中的多個參數?
假設函數:
參數: (可由向量表示)
代價函數:
通用梯度下降算法:
當有多個參數時,我們可以把算法表達式擴展開,從而得到:
3. 梯度下降算法中的實用技巧
(1)特徵縮放(feature scaling)
在計算代價函數時,如果各特徵之間的範圍精度差距很大,那麼求出來的代價函數的等高線會變得非常歪斜且瘦長,除了觀測方面的差距外,在運行梯度下降算法時,可能會需要更多次的迭代才能找到全局最小值,因此收斂速度會慢很多。
例如,現在有兩個特徵,爲房子大小(範圍爲0~2000),爲房間數量(1~5個),那麼畫出來的等高線可能會如下圖:
那麼我們進行特徵縮放(將各特徵除以它在訓練集中存在的大致最大值):
注意:特徵縮放的原則是讓特徵經過縮放後大致處於的範圍(不必完全符合,但應大致爲這個範圍。例如可以,但不可以)
經過特徵縮放後的代價函數的等高線圖大致如下:
(2)均值歸一化
均值歸一化一般和特徵縮放一起使用,與特徵縮放的目的相同,也是爲了減少收斂的迭代次數,更快的找到全局最小值。經過均值歸一化後的特徵值均值爲0,範圍爲。仍舊使用(1)的特徵做例子如下:
可以得到一個一般的均值歸一化表達式:
:訓練集中的均值
:訓練集中的最大值
(3)選擇合適的學習率
上節中已經講到如果學習率過高或過低,都不利於收斂,學習率過低則收斂過程中需要迭代的次數大大增加,而學習率過高則甚至有可能造成函數無法收斂,從而找不到全局最小值。
應該如何判斷選擇的學習率是否合適?
可以通過得到迭代次數與其相應得到的代價函數值的曲線關係觀察得出,如下圖是正常的迭代次數與代價函數值關係曲線圖:
在上圖中,可以看到迭代次數爲300次和400次時得到的代價函數幾乎沒有差別,此時就可以認爲已經得到了最小代價函數,從而得到相應的各參數值。
並且由圖也可以知道選擇的學習率是比較合適的,如果選擇的學習率比較小的話,迭代次數需要的更多,那麼在迭代次數300到400之間可看到代價函數值仍在明顯的下降;如果選擇的學習率過大,那麼得到的曲線則不規則,如下面倆圖就是學習率過大,此時要選擇更小的學習率。
4. 一定範圍內可更方便解出參數的方法——正規方程
在現在已經學習的方法中,解出參數需要通過梯度下降算法中對含參公式求偏導(即本節問題2中給出的參數公式),然而當參數過多時,求偏導就變得較爲麻煩。
舉例來說,如果代價函數只含有一個參數,將特徵設爲常量,表達式爲:
那麼求最小值,需對求導並令其等於0: 便可求出的值。
而當參數增加爲,爲了求每個參數,分別要令,依次求出各個偏導的等式,就變得較爲複雜。
正規方程的目的就是爲了解決求微積分(偏導)過於複雜的問題,如何根據正規方程求出參數可以用本節最開始的預測房價的例子給出。
房子大小(平方英尺) | 房間數量 | 樓層數 | 房子已使用年限 | 房價 |
2104 |
5 |
1 | 45 | 460 |
1416 | 3 | 2 | 40 | 232 |
1534 | 3 | 2 | 30 | 315 |
852 | 2 | 1 | 36 | 178 |
分別用矩陣X表示表格中訓練集的數據,用向量y表示表格中最後的房價值:
將需要求的參數作爲向量[向量表達等式],則:
根據這個方程就可以一次性求出多個參數。
注意:但是正規方程並不是任何情況下都可以用的,儘管正規方程比起梯度下降算法中求偏導要方便、快速很多,但是正規方程不能應用在參數過多的情況下(參數數量在幾千範圍內可以使用,但是參數量上萬時應開始不再使用正規方程),參數過多會導致其計算速度明顯下降,而梯度下降算法在參數量很多時的工作效果仍舊比較可觀,所以參數過多還是需要使用梯度下降算法。