在之前的學習中,我們只討論了含有一種參數的情況,也就是單變數的線性回歸問題,它的假設函數為: ,然而實際上,一個線性回歸問題會涉及到多個特徵。比如依然拿預測房價的例子,影響房價的因素不僅包括房屋面積,還可能涉及到卧室數量、房屋所在樓層、房屋年限等。
這裡我們用 表示特徵的個數, …表示特徵, 表示樣本數量, 表示數據集中的第 行的所有特徵(即特徵向量), 表示第 行特徵向量中的第 個分量,如下圖所示:
對於多變數線性回歸,對應的假設函數為:
為了方便使用矩陣的方式來表示,我們可以令 ,這樣假設函數就可以寫成如下形式:
其中 和 均為 維向量, 表示 向量的轉置。
和單變數線性回歸類似,我們依然使用梯度下降的方法來對代價函數進行優化。多變數線性回歸的代價函數為:
梯度下降依然是迭代如下函數直至收斂:
接下來對每個參數求偏導,得到的結果如下所示:
接下來只需要不斷利用梯度下降進行參數更新來優化代價函數直到收斂即可。
1. 特徵縮放
由於不同特徵的範圍可能會存在較大差異,比如在房屋價格預測的例子中,房屋的面積範圍可能是0-2000 ,而卧室數量的範圍可能為1-5,這兩種特徵的最大值相差了400倍。這種情況下使用梯度下降所導致的後果就是下降速度很慢(收斂的速度很慢)。為了解決這個問題,我們在梯度下降之前應該對數據做特徵縮放(Feature Scaling)處理,從而使所有的特徵都在一個差不多的範圍之內,以加快梯度下降的速度。以上問題我們就可以對房屋面積和卧室數量這兩個特徵進行縮放,處理如下:
進行如上的處理後這兩個特徵的範圍應該都在[-1,1]之間,事實上我們也希望通過這樣的手段將特徵值的範圍控制在[-1,1]之間。
2. 均值歸一化
此外我們也可以通過均值歸一化的方法進行特徵處理,過程如下:
其中 表示特徵 的均值, 和 分別表示特徵 的最大值和最小值。另外分母部分也可以使用 來代替,它表示特徵 的標準差。
對於如何判斷梯度下降是否正常運行以及學習率 如何選擇,本節給出方法的說明。
首先我們需要繪製出代價函數 與迭代次數的函數圖。如果梯度下降正常運行,那麼函數圖應如下所示:
隨著迭代次數的不斷增加,代價函數的值不斷減小並最終收斂。
還有一種叫自動收斂測試的方法,即每次迭代之後觀察 的值,如果迭代之後下降的值 ,就判定為收斂。不過準確的選擇閾值 是非常困難的,通常還是使用畫圖的方法。
如果出現了下面的兩種情況,這個時候應該選擇更小的 。如果 足夠小,那麼 在每次迭代之後都會減小;但是如果 太小,梯度下降會進行的非常緩慢。
在選擇 時,我們可以每隔3倍選取一個值,比如0.003,0.01,0.03,0.1…
在特徵的選擇上,我們可以合理的選擇特徵或者是對特徵進行組合或拆分,通過對特徵進行處理可能會得到一個更好的模型。
假如我們有兩個特徵fronttage和depth,分別表示房屋的臨街寬度和房屋深度,那麼假設函數就會寫成:
如果我們令x = frontage * depth,那麼x表示的就是房屋面積,這時候假設函數就是我們之前討論的單變數線性回歸的假設函數了,並且通過這種處理我們可以得到一個更好的模型。
和這個密切相關的一個概念就是多項式回歸(Polynomial Regression)。假設有下圖所示的關於房屋價格的數據集, 我們有多種模型去擬合。
第一個模型是一個二次函數,如下圖藍色線段所示。但是二次函數是一個拋物線,不符合常理(因為房價不會隨著房子面積的增加而減小),所以我們選擇三次函數的模型, 如下圖粉色線段所示。
想要使用該模型去擬合,我們可以將房屋的面積作為第一個特徵,面積的平方作為第二個特徵,面積的立方作為第三個特徵。(這裡需要注意的是, x1,x2,x3的範圍差別會非常大, 所以一定要進行特徵縮放處理)。
用梯度下降求解最優值有兩大缺點,一是我們要設定學習率 的值,二是要經過多次迭代才能達到最優值。事實上,我們可以使用一個更好的方法來求解最優值——正規方程。
我們先來看一個最簡單的例子,假設代價函數為 , 是一個實數,怎樣得到最優解? 很簡單,只要令它的導數為0就可以了。
事實上,代價函數不會像例子那樣簡單, 也不是一個實數而是一個 維的向量。這樣,我們分別對每個 求偏導,再令偏導數等於0,既可以計算出左右的 了。但看上去還是很繁瑣, 所以下面我們正規方程進行求解。首先,在數據集前加上一列 ,值都為1;然後將所有的特徵量放入矩陣X中(包括 );再將輸出值放入向量 中. 最後通過公式 , 就可以算出 的值。
使用正規公式計算 時不需要進行特徵縮放的處理,它和梯度下降相比如下圖所示:
此外,通常來講在正規方程中,對於 一般不會出現沒有逆矩陣的情況,如果出現了沒有逆的情況,可以考慮兩種處理方法:
(1) 使用了冗餘的特徵,檢查特徵中是否存在線性相關的兩個特徵並刪除掉一個;
(2) 特徵數量太多,甚至超過了樣本數量(n≥m),這種情況我們應刪掉一些特徵或進行正則化處理(正則化的內容將在後面講到)。