目錄
多變量線性迴歸(Linear Regression with Multiple Variables)
多變量線性迴歸(Linear Regression with Multiple Variables)
多維特徵
在之前房價預測的基礎上,現在我們對房價模型增加更多的特徵,例如房間數樓層等,構成一個含有多個變量的模型,模型中的特徵爲。
符號說明
特徵的數量 | |
一個向量(vector),代表第個訓練實例,是特徵矩陣中的第行 | |
代表特徵矩陣中第行的第個特徵,即第個訓練實例的第個特徵 |
支持多變量的假設表示爲
這個公式中有個參數和個變量,爲了使得公式能夠簡化一些,引入,則公式轉化爲:
這樣是爲了方便矩陣運算
此時模型中的參數是一個維的向量,任何一個訓練實例也都是維的向量,特徵矩陣的維度是 。因此公式可以簡化爲:,其中上標代表矩陣轉置。
多變量梯度下降
與單變量線性迴歸類似,在多變量線性迴歸中,我們也構建一個代價函數,則這個代價函數是所有建模誤差的平方和,即:
其中,
我們的目標和單變量線性迴歸問題中一樣,是要找出使得代價函數最小的一系列參數。 多變量線性迴歸的批量梯度下降算法爲:
即:
求導數後得到:
當時,
我們開始隨機選擇一系列的參數值,計算所有的預測結果後,再給所有的參數一個新的值,如此循環直到收斂。
梯度下降法實踐1-特徵縮放 Feature Scaling
在我們面對多維特徵問題的時候,我們要保證這些特徵都具有相近的尺度,這將幫助梯度下降算法更快地收斂。
以房價問題爲例,假設我們使用兩個特徵,房屋的尺寸和房間的數量,尺寸的值爲 0-2000平方英尺,而房間數量的值則是0-5,以兩個參數分別爲橫縱座標,繪製代價函數的等高線圖能,看出圖像會顯得很扁,梯度下降算法需要非常多次的迭代才能收斂。
解決的方法是嘗試將所有特徵的尺度都儘量縮放到-1到1之間。最簡單的方法是令,其中是平均值,是標準差。
梯度下降法實踐2-學習率
上次說到,梯度下降算法的每次迭代受到學習率的影響,如果學習率過小,則達到收斂所需的迭代次數會非常高;如果學習率過大,每次迭代可能不會減小代價函數,可能會越過局部最小值導致無法收斂。
可以考慮下面的一組學習率:
特徵和多項式迴歸
如房價預測問題,
其中(臨街寬度),(縱向深度),(面積),則.線性迴歸並不適用於所有數據,有時我們需要曲線來適應我們的數據,比如一個二次方模型:,或者三次方模型。
根據函數圖形特性,我們還可以使:
或者:
注意:如果我們採用多項式迴歸模型,在運行梯度下降算法前,特徵縮放非常有必要。
正規方程
目前爲止一直在學習梯度下降算法。但對於某些線性迴歸問題,正規方程方法是更好的解決方案。
例如對於下面的例子:
正規方程就是使用求導的方式來求最小的參數的,這一點和中學學的類似,即 。假設我們的訓練集特徵矩陣爲 (包含了)並且我們的訓練集結果爲向量,則利用正規方程解出向量
如下圖例子:
注意:對於那些不可逆的矩陣(通常是因爲特徵之間不獨立,如同時包含英尺爲單位的尺寸和米爲單位的尺寸兩個特徵,也有可能是特徵數量大於訓練集的數量),正規方程方法是不能用的。
正規方程與梯度下降比較
梯度下降 | 正規方程 |
需要選擇學習率 | 不需要 |
需要多次迭代 | 一次運算得出 |
當特徵數量大時也能較好適用 | 需要計算如果特徵數量n較大則運算代價大,因爲矩陣逆的計算時間複雜度爲,通常來說當小於10000 時還是可以接受的 |
適用於各種類型的模型 | 只適用於線性模型,不適合邏輯迴歸模型等其他模型 |
正規方程的實現
import numpy as np
def normalEqn(X, y):
theta = np.linalg.inv(X.T@X)@X.T@y #X.T@X等價於X.T.dot(X)
return theta
正規方程及不可逆性
對於結果不可逆原因是什麼?怎麼辦呢?
- 例如,在預測住房價格時,如果是以英尺爲尺寸規格計算的房子,是以平方米爲尺寸規格計算的房子,同時,你也知道1米等於3.28英尺 ( 四捨五入到兩位小數 ),這樣,你的這兩個特徵值將始終滿足約束:。 實際上,你可以用這樣的一個線性方程,來展示那兩個相關聯的特徵值,矩陣將是不可逆的。
- 在你想用大量的特徵值,嘗試實踐你的學習算法的時候,可能會導致矩陣的結果是不可逆的。 具體地說,在小於或等於的時候,例如,有等於10個的訓練樣本也有等於100的特徵數量。