1. 程式人生 > >特徵縮放(feature scaling)

特徵縮放(feature scaling)

機會永遠留給有準備的人,不積跬步,無以至千里,厚積而薄發,與大家共勉!加油!

博主最近在學習吳恩達的機器學習課程,將一些日常學習本人認為重要的地方在此記錄,與大家分享,如有錯誤,請大家不吝賜教! github:https://github.com/ScathonLin

在梯度下降演算法運用中,如果能保證不同特徵的取值在相同或者相近的範圍內,比如都處於0-1之間,那麼梯度下降演算法將會能很很快的收斂。

例如,一個含有兩個特徵的訓練樣本集,其中

X_{1}=size(0-2000 feets)

X_{2}=number of bedrooms(1-5)

此時,X1 是遠遠大於X2的,所以此時J_{\Theta }對應的輪廓圖將很瘦很高,如下圖所示:

這樣造成的結果很可能就是,梯度在下降過程中走了很多的“彎路”,來回震盪,收斂速度很慢,解決辦法就是:特徵縮放

  • 特徵縮放方法

對於上述例子,我們可以將特徵值進行如下轉換,即可將兩個特徵值範圍儘可能靠近,甚至相同:

這樣,0<X_{1}\leq 1 並且 0<X_{2}\leq 1,這樣的話,最終J_{\Theta }的輪廓影象就很“圓”,

這樣,梯度下降演算法就會很快的收斂。

  • 一般解決方案:均值歸一化

假設一個訓練集有m個樣本,n個屬性,x_{j}^{i}=\frac{x_{j}^{i}-\mu _{x_{j}}}{max(x_{j})} 其中 x_{j}^{i}代表第i個樣本的第j個屬性的值,\mu _{x_{j}}代表所有樣本第j個屬性的值的平均值,max(x_{j})代表所有樣本第j個屬性的最大值。下圖是教程視訊中的解釋。

注意,不要用x_{0}因為x_{0}=1

也可以將上面的x_{j}^{i}=\frac{x_{j}^{i}-\mu _{x_{j}}}{max(x_{j})}用這個式子來替換,其實就是將分母變成了max-min,x_{j}^{i}=\frac{x_{j}^{i}-\mu_{x_{j}} }{max(x_{j})-min(x_{j})}