機器學習數據預處理——標準化/歸一化方法

一般,在Data Science中,預處理數據有一個很關鍵的步驟就是數據的標準化。這裏主要引用sklearn文檔中的一些東西來講明,主要把各個標準化方法的應用場景以及優缺點總結歸納,以來充當筆記。html

首先,我要引用我本身的文章Feature Preprocessing on Kaggle裏面關於Scaling的描述算法

Tree-based models doesn’t depend on scalingapache

Non-tree-based models hugely depend on scaling網絡

1、標準化/歸一化的好處

1.1 提高模型精度

在機器學習算法的目標函數(例如SVM的RBF內核或線性模型的l1和l2正則化),許多學習算法中目標函數的基礎都是假設全部的特徵都是零均值而且具備同一階數上的方差。若是某個特徵的方差比其餘特徵大幾個數量級,那麼它就會在學習算法中佔據主導位置,致使學習器並不能像咱們說指望的那樣,從其餘特徵中學習。機器學習

舉一個簡單的例子,在KNN中,咱們須要計算待分類點與全部實例點的距離。假設每一個實例點(instance)由n個features構成。若是咱們選用的距離度量爲歐式距離,若是數據預先沒有通過歸一化,那麼那些絕對值大的features在歐式距離計算的時候起了決定性做用,soga。函數

從經驗上說,歸一化是讓不一樣維度之間的特徵在數值上有必定比較性,能夠大大提升分類器的準確性。學習

1.2 提高收斂速度

對於線性model來講,數據歸一化後,最優解的尋優過程明顯會變得平緩,更容易正確的收斂到最優解。

.net

比較這兩個圖,前者是沒有通過歸一化的,在梯度降低的過程當中,走的路徑更加的曲折,而第二個圖明顯路徑更加平緩,收斂速度更快。3d

  • 對於神經網絡模型,避免飽和是一個須要考慮的因素,一般參數的選擇決定於input數據的大小範圍。

2、標準化/歸一化方法

sklearn的preprocessing提供了能夠知足需求的歸一化方法:code

2.1 StandardScaler

標準化數據經過減去均值而後除以方差(或標準差),這種數據標準化方法通過處理後數據符合標準正態分佈,即均值爲0,標準差爲1,轉化函數爲:

x =(x - 𝜇)/𝜎

適用於:若是數據的分佈自己就服從正態分佈,就能夠用這個方法。

一般這種方法基本可用於有outlier的狀況,可是,在計算方差和均值的時候outliers仍然會影響計算。因此,在出現outliers的狀況下可能會出現轉換後的數的不一樣feature分佈徹底不一樣的狀況。

以下圖,通過StandardScaler以後,橫座標與縱座標的分佈出現了很大的差別,這多是outliers形成的。

2.2 MinMaxScaler

將特徵縮放至特定區間,將特徵縮放到給定的最小值和最大值之間,或者也能夠將每一個特徵的最大絕對值轉換至單位大小。這種方法是對原始數據的線性變換,將數據歸一到[0,1]中間。轉換函數爲:

x = (x-min)/(max-min)

這種方法有個缺陷就是當有新數據加入時,可能致使max和min的變化,須要從新定義。

敲黑板,這種方法對於outlier很是敏感,由於outlier影響了max或min值,因此這種方法只適用於數據在一個範圍內分佈的狀況

2.3 RobustScaler

若是你的數據包含許多異常值,使用均值和方差縮放可能並非一個很好的選擇。這種狀況下,你可使用 robust_scale 以及 RobustScaler 做爲替代品。它們對你的數據的中心和範圍使用更有魯棒性的估計。

This Scaler removes the median(中位數) and scales the data according to the quantile range(四分位距離,也就是說排除了outliers)

2.4 [0, 1] 仍是 [-1, 1] ?

假設咱們有一個只有一個hidden layer的多層感知機(MLP)的分類問題。每一個hidden unit表示一個超平面,每一個超平面是一個分類邊界。參數w(weight)決定超平面的方向,參數b(bias)決定超平面離原點的距離。若是b是一些小的隨機參數(事實上,b確實被初始化爲很小的隨機參數),那麼全部的超平面都幾乎穿過原點。因此,若是data沒有中心化在原點周圍,那麼這個超平面可能沒有穿過這些data,也就是說,這些data都在超平面的一側。這樣的話,局部極小點(local minima)頗有可能出現。 因此,在這種狀況下,標準化到[-1, 1]比[0, 1]更好。

一、在分類、聚類算法中,須要使用距離來度量類似性的時候、或者使用PCA技術進行降維的時候,StandardScaler表現更好。

二、在不涉及距離度量、協方差計算、數據不符合正太分佈的時候,可使用MinMaxScaler。好比圖像處理中,將RGB圖像轉換爲灰度圖像後將其值限定在[0 255]的範圍。

緣由是使用MinMaxScaler,其協方差產生了倍數值的縮放,所以這種方式沒法消除量綱對方差、協方差的影響,對PCA分析影響巨大;同時,因爲量綱的存在,使用不一樣的量綱、距離的計算結果會不一樣。

而在StandardScaler中,新的數據因爲對方差進行了歸一化,這時候每一個維度的量綱其實已經等價了,每一個維度都服從均值爲0、方差1的正態分佈,在計算距離的時候,每一個維度都是去量綱化的,避免了不一樣量綱的選取對距離計算產生的巨大影響。

  • Reference:
  1. 預處理數據-sklearn
  2. 數據標準化/歸一化normalization
  3. 機器學習筆記:爲何要對數據進行歸一化處理?
  4. Compare the effect of different scalers on data with outliers
  5. 數據歸一化和兩種經常使用的歸一化方法
  6. Should I normalize/standardize/rescale the data
相關文章
相關標籤/搜索