做者:Clare Liu, 英國金融科技數據科學家 翻譯:林鶴衝 校對:王紫嶽html
本文約2300字,建議閱讀10分鐘git
本文將解釋數據轉換中常見的特徵縮放方法:「標準化」和「歸一化」的不一樣之處,並舉例說明什麼時候使用,以及如何使用它們。github
數據轉換的前幾步每每能夠提高機器學習模型的準確性。本文將解釋數據轉換中常見的特徵縮放方法:「標準化」和「歸一化」的不一樣之處,並舉例說明什麼時候使用,以及如何使用它們。算法
數據轉換是數據處理中十分基本的步驟之一。當我初學特徵縮放的時候,常常用到「縮放」 「標準化」「歸一化」等術語。可是卻很難找到應該在何時,使用哪種方法的信息。因此,我想從如下幾方面講解一下:微信
標準化和歸一化的區別網絡
什麼時候使用標準化和歸一化機器學習
如何用Python實現特徵縮放ide
特徵縮放的意義學習
在實踐中,同一個數據集合中常常包含不一樣類別的變量。一個很大的問題是這些變量的值域可能大不相同。若是使用原值域將會使得值域大的變量被賦予更多的權重。針對這個問題,咱們須要在數據預處理時對自變量或特徵使用縮放的方法。雖然,「歸一化」和 「標準化」這兩個說法有時候能夠互換使用,可是兩者本質上確是不一樣的。優化
「特徵縮放的目的是使得全部特徵都在類似的範圍內,所以建模時每一個特徵都會變得同等重要,而且更便於機器學習的算法進行處理。」
範例
這個數據集包含一個因變量(purchased)以及三個自變量(Country, Age, Salary)。咱們能很容易發現變量彼此不在同一個範圍內——年齡(Age)的值域在27-50之間,工資(Salary)的區間則是48K-83K。工資的值域遠遠地超過了年齡的值域。這會干擾咱們的訓練模型,由於不少的機器學習模型諸如K均值聚類(K-means clustering)和近鄰算法(Nearest neighbour classification)都依據了歐氏距離(Euclidean Distance)。
關注年齡和工資變量
當咱們計算歐氏距離的時候,(x2-x1)² 的值要遠大於(y2-y1)² ,這意味着在不使用特徵縮放的狀況下,歐氏距離會被工資變量主導。年齡間的差距對總體歐氏距離的影響則很小。所以,咱們須要使用特徵縮放來將所有的數值統一到一個量級上來解決此問題。爲了達到這個目標,基本的解決方法有二:「標準化」和「歸一化」。
歐氏距離的應用
標準化 (Standardization):中心標準化
中心標準化(Z-score normalization)的結果是使全部特徵的數值被轉化成爲均值爲0、標準差爲1的正態分佈。公式以下:
這種將特徵的值域從新縮放到0到1之間的技巧對於優化算法是頗有用的,諸如在迴歸和神經網問題中應用到的「梯度降低」。縮放也適用於基於距離測量的算法,好比K近鄰算法(KNN)。
歸一化:離差標準化 (Max-Min Normalization)
另外一經常使用的方法就是離差標準化(Min-Max scaling)。這個方法是將每一個特徵數值轉化到[0,1]區間。對於每一個特徵,最小值被轉化爲0,最大值被轉化爲1。公式以下:
Code
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() scaler.fit(df) scaled_features = scaler.transform(df) #Convert to table format - MinMaxScaler df_MinMax = pd.DataFrame(data=scaled_features, columns=["Age", "Salary","Purchased","Country_France","Country_Germany", "Country_spain"])
中心標準化 vs 離差標準化
相比於中心標準化,離差標準化後的標準差比較小。用上述數據集來展現:
特徵縮放後
工資變量的常態分佈和標準差
年齡變量的常態分佈和標準差
經過以上圖表,咱們能清楚地發現離差標準化工資和年齡變量後,獲得的標準差小於使用中心標準化方法。這說明在使用離差標準化後,數據的數值更加接近平均值。
可是若是特徵列中含有異常值(outlier), 離差標準化只能將全部特徵統一比例,並不能很好地解決異常值問題。中心標準化在異常值方面則有更好的表現,所以它比離差標準化應用更廣。
特徵縮放的使用場景:
一些基於距離矩陣的機器學習模型,被稱爲「距離分類器」,好比K近鄰算法(KNN),支持向量機(SVM),神經網絡(Neural Network)。特徵縮放對於這些模型很是重要,特別是在特徵的值域很是不一樣時。特徵縮放減小了大值域變量對計算距離的影響。
離差標準化幫助咱們轉化不一樣比例上的數據,消除特殊特徵的主導。而且它不須要對數據的分佈進行假設(好比k近鄰和人工神經網絡)。可是,歸一化(離差標準化)不能很好地處理異常值。相反,標準化(中心標準化)能夠更好地處理異常值,以及加速諸如梯度降低等算法的收斂。因此咱們一般選擇中心標準化。
注:若是算法不是基於距離計算,特徵縮放則不重要,好比樸素貝葉斯和線性判別分析,以及樹模型(梯度提高、隨機森林等)。
總結:如今你應懂得
使用特徵縮放的目的
標準化與歸一化的區別
須要使用標準化或歸一化的算法
在Python中實現特徵縮放
獲取代碼和數據集合,請使用一下鏈接:
https://github.com/clareyan/feasturescaling
原文連接:
https://www.kdnuggets.com/2020/04/data-transformation-standardization-normalization.html
END
轉自: 數據派THU 公衆號;
版權聲明:本號內容部分來自互聯網,轉載請註明原文連接和做者,若有侵權或出處有誤請和咱們聯繫。
合做請加QQ:365242293
數據分析(ID : ecshujufenxi )互聯網科技與數據圈本身的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟覆蓋5000萬人羣。