線性迴歸是一種監督學習方法.
對每個樣本來說:
Hypothesis:
即:
其中, 爲預測值, 爲樣本的第i個特徵,且; 爲該特徵下的權重,bias偏差。線性迴歸就是要在已有的樣本特徵和標籤下學習特徵權重,從而在待測樣本中應用學習好的特徵權重,得到待測樣本的標籤。
定義損失函數:
我們的目的是找到最優的 來最小化 , 使用梯度下降方法:
對每一個樣本來說:
Batch Gradient Descent:
其中i表示第i個樣本。上式爲第i個樣本第j個特徵的梯度求解然後平均。
因此:
其中爲學習速率。
對於的一些使用建議可以參考下圖。
接下來,我們來了解幾種求解最優參數的方法。
批量梯度下降(batch gradient descent(BGD)):
不斷迭代下式直到收斂{
}
由上式可知,每一次迭代都要遍歷所有樣本,因此,當樣本量很大時,批量梯度下降法迭代時間會很長。
隨機梯度下降(stochastic gradient descent(SGD)):
不斷迭代下式直到收斂{
for i = 1 to m,{
}
由上式可知,隨機梯度下降法每一次迭代只使用一個訓練樣本,因此可以大大縮小迭代時間。
SGD每一個epoch也需要計算樣本量大小的數量的梯度(1...m)。SGD與BGD的主要區別在於,SGD一個epoch下來計算了m次梯度同時也更新了m次,而BGD一個epoch下來雖然也同樣計算了m次梯度,但它只更新了一次。導致最後收斂是BGD所需要計算的樣本梯度次數遠遠大於SGD。
Mini-batch gradient descent
具體是指:在每一次迭代中,隨機選取若干個訓練樣本(比如50個),使用上述梯度下降方法進行參數優化,多次迭代直到收斂。該方法的速度比BGD快,比SGD慢;精度比BGD低,比SGD高。
特徵歸一化(Features Scaling)
上圖中的兩幅圖解釋了爲什麼需要做特徵歸一化。這裏以二維情形來舉例說明。如果的分佈相差很大的話,會造成左圖的情形,損失函數就會很瘦長像一個橢圓一樣,這樣梯度下降的時候就會來回震盪,效果很差。而如果歸一化之後,損失函數就會像一個圓一樣,這樣梯度下降就會好很多。
至於爲什麼損失函數在橢圓的時候梯度下降效果不好。可以這麼理解,尺度小的一方可能早早達到了最優解附近,但由於尺度大的變量還在緩慢優化中,尺度小的只能來回震盪,此時又會對尺度大的變量產生影響。還有一個原因就是尺度大的變量“路”比較遠,更新的慢!
通常的做法是將它們縮放到一定到尺寸,如-1到1,這個數字並不是特別重要,如-3到3或者-1/3到1/3也是可以到。
另一種普遍到做法是進行標準化,將數據標準化到0-1正態分佈。也可以不除以標準差,因爲標準差到計算往往也比較費時,可以直接用樣本的數值範圍來代替。我們叫做Mean normalization
線性迴歸的在線學習算法採用的就是SGD的梯度下降方式。
多元線性迴歸
在機器學習算法中,基於針對數據的非線性函數的線性模型是非常常見的,這種方法即可以像線性模型一樣高效的運算,同時使得模型可以適用於更爲廣泛的數據上,多元線性迴歸就是這類算法中最爲簡單的一個。
關於多元線性迴歸的應用,這裏舉個非常簡單的例子:一般的線性迴歸,模型既是參數的線性函數,同時也是輸入變量的線性函數,對於一個二維的數據而言,模型的數學表達式如下:
如果想要擬合一個拋物面,而不是擬合一個平面的話,那麼就需計算輸入變量二次項的線性組合,則模型更新爲下面這個形式:
注意:這裏需要說明的是,更新後的模型,雖然是輸入變量的二次函數,但是,由於它仍然是參數的一次線性函數,所以它仍然是一個線性模型。爲了說明這個問題,可以假設有一個新的變量,那麼就可以將上面的模型重寫爲下面的這個形式:
用向量替換向量的過程,相當於一個特徵變換或者叫做特徵生成的過程,它將輸入特徵的維度提高,但模型仍然是一個線性模型。
關於線性模型與非線性模型寫過一篇文章線性模型非線性模型,感知機與神經網絡