在機器學習和數據挖掘中,經常會聽到兩個名詞:歸一化(Normalization)與標準化(Standardization)。它們具體是什麼?帶來什麼益處?具體怎麼用?本文來具體討論這些問題。
作者:無影隨想
時間:2016年1月。
出處:http://www.zhaokv.com/2016/01/normalization-and-standardization.html
聲明:版權所有,轉載請聯繫作者並註明出處
在機器學習和數據挖掘中,經常會聽到兩個名詞:歸一化(Normalization)與標準化(Standardization)。它們具體是什麼?帶來什麼益處?具體怎麼用?本文來具體討論這些問題。
一、是什麼
1. 歸一化
常用的方法是通過對原始數據進行線性變換把數據映射到[0,1]之間,變換函數為:
$x'=\frac{x-\min}{\max-\min}$
其中$\min$是樣本中最小值,$\max$是樣本中最大值,註意在數據流場景下最大值與最小值是變化的。另外,最大值與最小值非常容易受異常點影響,所以這種方法魯棒性較差,只適合傳統精確小數據場景。
2. 標準化
常用的方法是z-score標準化,經過處理後的數據均值為0,標準差為1,處理方法是:
$x'=\frac{x-\mu}{\sigma}$
其中$\mu$是樣本的均值,$\sigma$是樣本的標準差,它們可以通過現有樣本進行估計。在已有樣本足夠多的情況下比較穩定,適合現代嘈雜大數據場景。
二、帶來什麼
歸一化的依據非常簡單,不同變數往往量綱不同,歸一化可以消除量綱對最終結果的影響,使不同變數具有可比性。比如兩個人體重差10KG,身高差0.02M,在衡量兩個人的差別時體重的差距會把身高的差距完全掩蓋,歸一化之後就不會有這樣的問題。
標準化的原理比較複雜,它表示的是原始值與均值之間差多少個標準差,是一個相對值,所以也有去除量綱的功效。同時,它還帶來兩個附加的好處:均值為0,標準差為1。
均值為0有什麼好處呢?它可以使數據以0為中心左右分佈(這不是廢話嘛),而數據以0為中心左右分佈會帶來很多便利。比如在去中心化的數據上做SVD分解等價於在原始數據上做PCA;機器學習中很多函數如Sigmoid、Tanh、Softmax等都以0為中心左右分佈(不一定對稱)。
標準差為1有什麼好處呢?這個更複雜一些。對於$x_i$與$x_{i'}$兩點間距離,往往表示為
$D(x_i,x_{i'})=\sum\limits_{j=1}^pw_j\cdot d_j(x_{ij},x_{i'j});\sum\limits_{j=1}^pw_j=1$
其中$d_j(x_{ij},x_{i'j})$是屬性$j$兩個點之間的距離,$w_j$是該屬性間距離在總距離中的權重,註意設$w_j=1,\forall j$並不能實現每個屬性對最後的結果貢獻度相同。對於給定的數據集,所有點對間距離的平均值是個定值,即
$\bar{D}=\frac{1}{N^2}\sum\limits_{i=1}^N\sum\limits_{i'=1}^ND(x_i,x_{i'})=\sum\limits_{j=1}^pw_j\cdot \bar{d}_j$
是個常數,其中
$\bar{d}_j=\frac{1}{N^2}\sum\limits_{i=1}^N\sum\limits_{i'=1}^Nd_j(x_{ij}, x_{x'j})$
可見第$j$個變數對最終整體平均距離的影響是$w_j\cdot \bar{d}_j$,所以設$w_j\sim 1/\bar{d}_j$可以使所有屬性對全數據集平均距離的貢獻相同。現在設$d_j$為歐式距離(或稱為二範數)的平方,它是最常用的距離衡量方法之一,則有
$\bar{d_j}=\frac{1}{N^2}\sum\limits_{i=1}^N\sum\limits_{i'=1}^N(x_{ij}-x_{i'j})^2=2\cdot var_j$
其中$var_j$是$Var(X_j)$的樣本估計,也就是說每個變數的重要程度正比於這個變數在這個數據集上的方差。如果我們讓每一維變數的標準差都為1(即方差都為1),每維變數在計算距離的時候重要程度相同。
三、怎麼用
在涉及到計算點與點之間的距離時,使用歸一化或標準化都會對最後的結果有所提升,甚至會有質的區別。那在歸一化與標準化之間應該如何選擇呢?根據上一節我們看到,如果把所有維度的變數一視同仁,在最後計算距離中發揮相同的作用應該選擇標準化,如果想保留原始數據中由標準差所反映的潛在權重關係應該選擇歸一化。另外,標準化更適合現代嘈雜大數據場景。