【機器學習】線性迴歸之梯度下降、多元線性迴歸概述

線性迴歸是一種監督學習方法. 
對每個樣本來說: 

Hypothesis:

即:

其中,h_\theta(x) 爲預測值,x_i 爲樣本的第i個特徵,且x_0 = 1; \theta_i 爲該特徵下的權重,bias偏差b=\theta_0。線性迴歸就是要在已有的樣本特徵和標籤下學習特徵權重,從而在待測樣本中應用學習好的特徵權重,得到待測樣本的標籤。 

定義損失函數:

我們的目的是找到最優的 \theta 來最小化 J(\theta)  , 使用梯度下降方法:

對每一個樣本來說: 

Batch Gradient Descent:

 

其中i表示第i個樣本。上式爲第i個樣本第j個特徵的梯度求解然後平均。 

因此:

其中\alpha爲學習速率。

對於\alpha的一些使用建議可以參考下圖。


接下來,我們來了解幾種求解最優參數的方法。

批量梯度下降(batch gradient descent(BGD)):

不斷迭代下式直到收斂{

}

由上式可知,每一次迭代都要遍歷所有樣本,因此,當樣本量很大時,批量梯度下降法迭代時間會很長。

隨機梯度下降(stochastic gradient descent(SGD)): 

不斷迭代下式直到收斂{ 
for i = 1 to m,{ 

}

由上式可知,隨機梯度下降法每一次迭代只使用一個訓練樣本,因此可以大大縮小迭代時間。

SGD每一個epoch也需要計算樣本量大小的數量的梯度(1...m)。SGD與BGD的主要區別在於,SGD一個epoch下來計算了m次梯度同時也更新了m次\theta,而BGD一個epoch下來雖然也同樣計算了m次梯度,但它只更新了一次\theta。導致最後收斂是BGD所需要計算的樣本梯度次數遠遠大於SGD。

Mini-batch gradient descent

具體是指:在每一次迭代中,隨機選取若干個訓練樣本(比如50個),使用上述梯度下降方法進行參數優化,多次迭代直到收斂。該方法的速度比BGD快,比SGD慢;精度比BGD低,比SGD高。

特徵歸一化(Features Scaling)

上圖中的兩幅圖解釋了爲什麼需要做特徵歸一化。這裏以二維情形來舉例說明。如果x_1,x_2的分佈相差很大的話,會造成左圖的情形,損失函數就會很瘦長像一個橢圓一樣,這樣梯度下降的時候就會來回震盪,效果很差。而如果歸一化之後,損失函數就會像一個圓一樣,這樣梯度下降就會好很多。

至於爲什麼損失函數在橢圓的時候梯度下降效果不好。可以這麼理解,尺度小的一方可能早早達到了最優解附近,但由於尺度大的變量還在緩慢優化中,尺度小的只能來回震盪,此時又會對尺度大的變量產生影響。還有一個原因就是尺度大的變量“路”比較遠,更新的慢!

通常的做法是將它們縮放到一定到尺寸,如-1到1,這個數字並不是特別重要,如-3到3或者-1/3到1/3也是可以到。

另一種普遍到做法是進行標準化,將數據標準化到0-1正態分佈。也可以不除以標準差,因爲標準差到計算往往也比較費時,可以直接用樣本的數值範圍來代替。我們叫做Mean normalization

 

線性迴歸的在線學習算法採用的就是SGD的梯度下降方式。

多元線性迴歸

在機器學習算法中,基於針對數據的非線性函數的線性模型是非常常見的,這種方法即可以像線性模型一樣高效的運算,同時使得模型可以適用於更爲廣泛的數據上,多元線性迴歸就是這類算法中最爲簡單的一個。

關於多元線性迴歸的應用,這裏舉個非常簡單的例子:一般的線性迴歸,模型既是參數w的線性函數,同時也是輸入變量x的線性函數,對於一個二維的數據而言,模型的數學表達式如下:

如果想要擬合一個拋物面,而不是擬合一個平面的話,那麼就需計算輸入變量x二次項的線性組合,則模型更新爲下面這個形式:

注意:這裏需要說明的是,更新後的模型,雖然是輸入變量x的二次函數,但是,由於它仍然是參數w的一次線性函數,所以它仍然是一個線性模型。爲了說明這個問題,可以假設有一個新的變量z=[x_{1},x_{2},x_{1}x_{2},x_{1}^2,x_{2}^2],那麼就可以將上面的模型重寫爲下面的這個形式:

用向量z替換向量x的過程,相當於一個特徵變換或者叫做特徵生成的過程,它將輸入特徵的維度提高,但模型仍然是一個線性模型。

 

關於線性模型與非線性模型寫過一篇文章線性模型非線性模型,感知機與神經網絡

發佈了50 篇原創文章 · 獲贊 183 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章