1. 程式人生 > >機器學習數據預處理——標準化/歸一化方法總結

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

目標 out enc 並不是 depend 區間 standards ima HA

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

首先,我要引用我自己的文章Feature Preprocessing on Kaggle裏面關於Scaling的描述

Tree-based models doesn’t depend on scaling

Non-tree-based models hugely depend on scaling

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

1.1 提升模型精度

在機器學習算法的目標函數(例如SVM的RBF內核或線性模型的l1和l2正則化),許多學習算法中目標函數的基礎都是假設所有的特征都是零均值並且具有同一階數上的方差。如果某個特征的方差比其他特征大幾個數量級,那麽它就會在學習算法中占據主導位置,導致學習器並不能像我們說期望的那樣,從其他特征中學習。

舉一個簡單的例子,在KNN中,我們需要計算待分類點與所有實例點的距離。假設每個實例點(instance)由n個features構成。如果我們選用的距離度量為歐式距離,如果數據預先沒有經過歸一化,那麽那些絕對值大的features在歐式距離計算的時候起了決定性作用,soga。

從經驗上說,歸一化是讓不同維度之間的特征在數值上有一定比較性,可以大大提高分類器的準確性。

1.2 提升收斂速度

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

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

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

二、標準化/歸一化方法

sklearn的preprocessing提供了可以滿足需求的歸一化方法:

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]更好。

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

2、在不涉及距離度量、協方差計算、數據不符合正太分布的時候,可以使用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

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