作者:無影隨想
時間:2016年1月。
出處:https://zhaokv.com/machine_learning/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),每維變量在計算距離的時候重要程度相同。
三、怎么用
在涉及到計算點與點之間的距離時,使用歸一化或標准化都會對最后的結果有所提升,甚至會有質的區別。那在歸一化與標准化之間應該如何選擇呢?根據上一節我們看到,如果把所有維度的變量一視同仁,在最后計算距離中發揮相同的作用應該選擇標准化,如果想保留原始數據中由標准差所反映的潛在權重關系應該選擇歸一化。另外,標准化更適合現代嘈雜大數據場景。