歸一化 (Normalization)、標(biāo)準(zhǔn)化 (Standardization)和中心化/零均值化 (Zero-centered)

1 概念
??歸一化:1)把數(shù)據(jù)變成(0,1)或者(1,1)之間的小數(shù)。主要是為了數(shù)據(jù)處理方便提出來的,把數(shù)據(jù)映射到0~1范圍之內(nèi)處理,更加便捷快速。2)把有量綱表達(dá)式變成無量綱表達(dá)式,便于不同單位或量級的指標(biāo)能夠進(jìn)行比較和加權(quán)。歸一化是一種簡化計(jì)算的方式,即將有量綱的表達(dá)式,經(jīng)過變換,化為無量綱的表達(dá)式,成為純量。
??標(biāo)準(zhǔn)化:在機(jī)器學(xué)習(xí)中,我們可能要處理不同種類的資料,例如,音訊和圖片上的像素值,這些資料可能是高維度的,資料標(biāo)準(zhǔn)化后會使每個特征中的數(shù)值平均變?yōu)?(將每個特征的值都減掉原始資料中該特征的平均)、標(biāo)準(zhǔn)差變?yōu)?,這個方法被廣泛的使用在許多機(jī)器學(xué)習(xí)算法中(例如:支持向量機(jī)、邏輯回歸和類神經(jīng)網(wǎng)絡(luò))。
??中心化:平均值為0,對標(biāo)準(zhǔn)差無要求
??歸一化和標(biāo)準(zhǔn)化的區(qū)別:歸一化是將樣本的特征值轉(zhuǎn)換到同一量綱下把數(shù)據(jù)映射到[0,1]或者[-1, 1]區(qū)間內(nèi),僅由變量的極值決定,因區(qū)間放縮法是歸一化的一種。標(biāo)準(zhǔn)化是依照特征矩陣的列處理數(shù)據(jù),其通過求z-score的方法,轉(zhuǎn)換為標(biāo)準(zhǔn)正態(tài)分布,和整體樣本分布相關(guān),每個樣本點(diǎn)都能對標(biāo)準(zhǔn)化產(chǎn)生影響。它們的相同點(diǎn)在于都能取消由于量綱不同引起的誤差;都是一種線性變換,都是對向量X按照比例壓縮再進(jìn)行平移。
??標(biāo)準(zhǔn)化和中心化的區(qū)別:標(biāo)準(zhǔn)化是原始分?jǐn)?shù)減去平均數(shù)然后除以標(biāo)準(zhǔn)差,中心化是原始分?jǐn)?shù)減去平均數(shù)。 所以一般流程為先中心化再標(biāo)準(zhǔn)化。
??無量綱:我的理解就是通過某種方法能去掉實(shí)際過程中的單位,從而簡化計(jì)算。

2 為什么要?dú)w一化/標(biāo)準(zhǔn)化?
??如前文所說,歸一化/標(biāo)準(zhǔn)化實(shí)質(zhì)是一種線性變換,線性變換有很多良好的性質(zhì),這些性質(zhì)決定了對數(shù)據(jù)改變后不會造成“失效”,反而能提高數(shù)據(jù)的表現(xiàn),這些性質(zhì)是歸一化/標(biāo)準(zhǔn)化的前提。比如有一個很重要的性質(zhì):線性變換不會改變原始數(shù)據(jù)的數(shù)值排序。
(1)某些模型求解需要
??1)在使用梯度下降的方法求解最優(yōu)化問題時, 歸一化/標(biāo)準(zhǔn)化后可以加快梯度下降的求解速度,即提升模型的收斂速度。如左圖所示,未歸一化/標(biāo)準(zhǔn)化時形成的等高線偏橢圓,迭代時很有可能走“之”字型路線(垂直長軸),從而導(dǎo)致迭代很多次才能收斂。而如右圖對兩個特征進(jìn)行了歸一化,對應(yīng)的等高線就會變圓,在梯度下降進(jìn)行求解時能較快的收斂。


橢圓等高線和圓形等高線

梯度下降軌跡

??2)一些分類器需要計(jì)算樣本之間的距離(如歐氏距離),例如KNN。如果一個特征值域范圍非常大,那么距離計(jì)算就主要取決于這個特征,從而與實(shí)際情況相悖(比如這時實(shí)際情況是值域范圍小的特征更重要)。

(2)無量綱化
??例如房子數(shù)量和收入,因?yàn)閺臉I(yè)務(wù)層知道,這兩者的重要性一樣,所以把它們?nèi)繗w一化。 這是從業(yè)務(wù)層面上作的處理。

(3)避免數(shù)值問題
??太大的數(shù)會引發(fā)數(shù)值問題。

3 數(shù)據(jù)預(yù)處理時
3.1 歸一化
(1)Min-Max Normalization
?? x' = (x - X_min) / (X_max - X_min)

(2)平均歸一化
?? x' = (x - μ) / (MaxValue - MinValue)
??(1)和(2)有一個缺陷就是當(dāng)有新數(shù)據(jù)加入時,可能導(dǎo)致max和min的變化,需要重新定義。

(3)非線性歸一化
??1)對數(shù)函數(shù)轉(zhuǎn)換:y = log10(x)
??2)反余切函數(shù)轉(zhuǎn)換:y = atan(x) * 2 / π
??(3)經(jīng)常用在數(shù)據(jù)分化比較大的場景,有些數(shù)值很大,有些很小。通過一些數(shù)學(xué)函數(shù),將原始值進(jìn)行映射。該方法包括 log、指數(shù),正切等。需要根據(jù)數(shù)據(jù)分布的情況,決定非線性函數(shù)的曲線,比如log(V, 2)還是log(V, 10)等。

3.2 標(biāo)準(zhǔn)化
(1)Z-score規(guī)范化(標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化 / 零均值標(biāo)準(zhǔn)化)
??x' = (x - μ)/σ

3.3 中心化
??x' = x - μ

4 什么時候用歸一化?什么時候用標(biāo)準(zhǔn)化?
??(1)如果對輸出結(jié)果范圍有要求,用歸一化。
??(2)如果數(shù)據(jù)較為穩(wěn)定,不存在極端的最大最小值,用歸一化。
??(3)如果數(shù)據(jù)存在異常值和較多噪音,用標(biāo)準(zhǔn)化,可以間接通過中心化避免異常值和極端值的影響。
??某知乎答主的回答提到了他個人經(jīng)驗(yàn):一般來說,我個人建議優(yōu)先使用標(biāo)準(zhǔn)哈。對于輸出有要求時再嘗試別的方法,如歸一化或者更加復(fù)雜的方法。很多方法都可以將輸出范圍調(diào)整到[0, 1],如果我們對于數(shù)據(jù)的分布有假設(shè)的話,更加有效的方法是使用相對應(yīng)的概率密度函數(shù)來轉(zhuǎn)換。讓我們以高斯分布為例,我們可以首先計(jì)算高斯誤差函數(shù)(Gaussian Error Function),此處定為er fc(·),那么可以用下式進(jìn)行轉(zhuǎn)化:


??這篇博客提到他的經(jīng)驗(yàn):1) 在分類、聚類算法中,需要使用距離來度量相似性的時候、或者使用PCA技術(shù)進(jìn)行降維的時候,第二種方法(Z-score standardization)表現(xiàn)更好。2) 在不涉及距離度量、協(xié)方差計(jì)算、數(shù)據(jù)不符合正太分布的時候,可以使用第一種方法或其他歸一化方法。比如圖像處理中,將RGB圖像轉(zhuǎn)換為灰度圖像后將其值限定在[0 255]的范圍。

5 哪些模型必須歸一化/標(biāo)準(zhǔn)化?
(1)SVM
??不同的模型對特征的分布假設(shè)是不一樣的。比如SVM 用高斯核的時候,所有維度共用一個方差,這不就假設(shè)特征分布是圓的么,輸入橢圓的就坑了人家,所以簡單的歸一化都還不夠好,來杯白化才有勁。比如用樹的時候就是各個維度各算各的切分點(diǎn),沒所謂。

(2)KNN
??需要度量距離的模型,一般在特征值差距較大時,都會進(jìn)行歸一化/標(biāo)準(zhǔn)化。不然會出現(xiàn)“大數(shù)吃小數(shù)”。

(3)神經(jīng)網(wǎng)絡(luò)
??1)數(shù)值問題
??歸一化/標(biāo)準(zhǔn)化可以避免一些不必要的數(shù)值問題。輸入變量的數(shù)量級未致于會引起數(shù)值問題吧,但其實(shí)要引起也并不是那么困難。因?yàn)閠ansig(tanh)的非線性區(qū)間大約在[-1.7,1.7]。意味著要使神經(jīng)元有效,tansig( w1x1 + w2x2 +b) 里的 w1x1 +w2x2 +b 數(shù)量級應(yīng)該在 1 (1.7所在的數(shù)量級)左右。這時輸入較大,就意味著權(quán)值必須較小,一個較大,一個較小,兩者相乘,就引起數(shù)值問題了。
??假如你的輸入是421,你也許認(rèn)為,這并不是一個太大的數(shù),但因?yàn)橛行?quán)值大概會在1/421左右,例如0.00243,那么,在matlab里輸入 421·0.00243 == 0.421·2.43,會發(fā)現(xiàn)不相等,這就是一個數(shù)值問題。

??2)求解需要
??a. 初始化:在初始化時我們希望每個神經(jīng)元初始化成有效的狀態(tài),tansig函數(shù)在[-1.7, 1.7]范圍內(nèi)有較好的非線性,所以我們希望函數(shù)的輸入和神經(jīng)元的初始化都能在合理的范圍內(nèi)使得每個神經(jīng)元在初始時是有效的。(如果權(quán)值初始化在[-1,1]且輸入沒有歸一化且過大,會使得神經(jīng)元飽和)
??b. 梯度:以輸入-隱層-輸出這樣的三層BP為例,我們知道對于輸入-隱層權(quán)值的梯度有2ew(1-a^2)*x的形式(e是誤差,w是隱層到輸出層的權(quán)重,a是隱層神經(jīng)元的值,x是輸入),若果輸出層的數(shù)量級很大,會引起e的數(shù)量級很大,同理,w為了將隱層(數(shù)量級為1)映身到輸出層,w也會很大,再加上x也很大的話,從梯度公式可以看出,三者相乘,梯度就非常大了。這時會給梯度的更新帶來數(shù)值問題。
??c. 學(xué)習(xí)率:由(2)中,知道梯度非常大,學(xué)習(xí)率就必須非常小,因此,學(xué)習(xí)率(學(xué)習(xí)率初始值)的選擇需要參考輸入的范圍,不如直接將數(shù)據(jù)歸一化,這樣學(xué)習(xí)率就不必再根據(jù)數(shù)據(jù)范圍作調(diào)整。 隱層到輸出層的權(quán)值梯度可以寫成 2ea,而輸入層到隱層的權(quán)值梯度為 2ew(1-a^2)x ,受 x 和 w 的影響,各個梯度的數(shù)量級不相同,因此,它們需要的學(xué)習(xí)率數(shù)量級也就不相同。對w1適合的學(xué)習(xí)率,可能相對于w2來說會太小,若果使用適合w1的學(xué)習(xí)率,會導(dǎo)致在w2方向上步進(jìn)非常慢,會消耗非常多的時間,而使用適合w2的學(xué)習(xí)率,對w1來說又太大,搜索不到適合w1的解。如果使用固定學(xué)習(xí)率,而數(shù)據(jù)沒歸一化,則后果可想而知。
??d.搜索軌跡:已解釋
??
(4)PCA

參考:
標(biāo)準(zhǔn)化和歸一化什么區(qū)別? - 知乎:https://www.zhihu.com/question/20467170
R--數(shù)據(jù)標(biāo)準(zhǔn)化、歸一化、中心化處理:https://zhuanlan.zhihu.com/p/33727799
特征工程中的[歸一化]有什么作用? - 知乎:https://www.zhihu.com/question/20455227
神經(jīng)網(wǎng)絡(luò)為什么要?dú)w一化:http://nnetinfo.com/nninfo/showText.jsp?id=37

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容