為什麼要資料歸一化和歸一化方法 為什麼要資料歸一化和歸一化方法
為什麼要資料歸一化和歸一化方法
2017年09月22日 08:59:58 wuxiaosi808 閱讀數:11657<span class="tags-box artic-tag-box"> <span class="label">標籤:</span> <a data-track-click="{"mod":"popu_626","con":"機器學習"}" class="tag-link" href="http://so.csdn.net/so/search/s.do?q=機器學習&t=blog" target="_blank">機器學習 </a> <span class="article_info_click">更多</span></span> <div class="tags-box space"> <span class="label">個人分類:</span> <a class="tag-link" href="https://blog.csdn.net/wuxiaosi808/article/category/7063840" target="_blank">機器學習 </a> </div> </div> <div class="operating"> </div> </div> </div> </div> <article class="baidu_pl"> <div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"> <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d7e2a68c7c.css"> <div class="htmledit_views" id="content_views">
轉自:https://zhuanlan.zhihu.com/p/27627299
在餵給機器學習模型的資料中,對資料要進行歸一化的處理。
為什麼要進行歸一化處理,下面從尋找最優解這個角度給出自己的看法。
例子
假定為預測房價的例子,自變數為面積,房間數兩個,因變數為房價。
那麼可以得到的公式為:
其中代表房間數,代表變數前面的係數。
其中代表面積,代表變數前面的係數。
首先我們祭出兩張圖代表資料是否均一化的最優解尋解過程。
未歸一化:
歸一化之後
為什麼會出現上述兩個圖,並且它們分別代表什麼意思。
我們在尋找最優解的過程也就是在使得損失函式值最小的theta1,theta2。
上述兩幅圖程式碼的是損失函式的等高線。
我們很容易看出,當資料沒有歸一化的時候,面積數的範圍可以從0~1000,房間數的範圍一般為0~10,可以看出面積數的取值範圍遠大於房間數。
影響
這樣造成的影響就是在畫損失函式的時候,
資料沒有歸一化的表示式,可以為:
造成影象的等高線為類似橢圓形狀,最優解的尋優過程就是像下圖所示:
而資料歸一化之後,損失函式的表示式可以表示為:
其中變數的前面係數幾乎一樣,則影象的等高線為類似圓形形狀,最優解的尋優過程像下圖所示:
從上可以看出,資料歸一化後,最優解的尋優過程明顯會變得平緩,更容易正確的收斂到最優解。
這也是資料為什麼要歸一化的一個原因。
作用:對於不同的特徵向量,比如年齡、購買量、購買額,在數值的量綱上相差十倍或者百千倍。如果不歸一化處理,就不容易進行比較、求距離,模型引數和正確度精確度就會受影響,甚至得不出正確的結果。
舉個例子:用梯度下降法求解最優解時,下圖展示沒有歸一化和歸一化處理兩種情況下的求解過程。
左圖表示沒有歸一化的求解過程;右圖表示有歸一化的處理過程。
X1、X2表示特徵向量,數值區間分別為[0,2000],[1,5].
圖中藍線為等高線,紅色為梯度下降求解線,中心紅點為最優解。
左圖的Z字形為未歸一化處理的梯度下降求解過程。
右圖的1字形為歸一化處理後的梯度下降求解過程。
對比可知,歸一化處理後,等高線更圓,求解得到的梯度方向更能直指圓心,收斂速度更快,效率更高。
如果不歸一化,不但收斂速度慢,很可能找不到最優解。
歸一化除了能夠提高求解速度,還可能提高計算精度。
比如:計算樣本距離時,如果特徵向量取值範圍相差很大,如果不進行歸一化處理,則值範圍更大的特徵向量對距離的影響更大,實際情況是,取值範圍更小的特徵向量對距離影響更大,這樣的話,精度就會收到影響。
歸一化常用方法
1、線性歸一化函式(Min-Max Scaling)
x’ = (x-min(x))/(max(x)-min(x))
把原始資料取值轉換到[0,1]之間。
實際使用時,不同樣本集得到的max/min可能不同,造成歸一化結果不穩定,從而使模型後續使用也不穩定。
可以經驗值來代替max/min,比如人的年齡,max=100,min=0。避免不同樣本集max/min的不同造成的模型偏差。
2、0均值標準化(Z-score standardization)
x’ = (x-u)/theta.
u為樣本均值,theta為樣本方差。
轉換後的數值服從均值為0,方差為1的高斯正態分佈。
應用場景:原始資料(近似)高斯分佈。否則歸一化後的效果會很差。
3、非線性歸一化(Nonlinear Scaling)
包括對數log,指數e,正切等。
應用場景:資料分化比較大,有些很大,有些很小,可能用此方法將數值對映到一個比較小的範圍進行處理。log(V,2),log(V,10).
小結:
1、對於需要求距離的分類、聚類、相似度、協方差等,資料符合或者近似符合高斯正態分佈時,PCA降維時,常用0均值標準化,可以得到較好的效果。
2、對於其他情況,如果資料分化不是很大,可以用線性歸一化處理。
3、如果資料分化很大,可以用非線性歸一化處理。
參考文章
1、http://blog.csdn.net/zbc1090549839/article/details/44103801
2、http://www.open-open.com/lib/view/open1429697131932.html