一、數據預處理——數據歸一化 & 數據標準化

一、數據預處理——數據歸一化 & 數據標準化

點擊標題即可獲取文章相關的源代碼文件喲!

1.1 數據無量綱化

在機器學習算法實踐中,我們往往有着將不同規格的數據轉換到同一規格,或不同分佈的數據轉換到某個特定分佈的需求,這種需求統稱爲將數據“無量綱化”。譬如梯度和矩陣爲核心的算法中,譬如邏輯迴歸,支持向量機,神經網絡,無量綱化可以加快求解速度;而在距離類模型,譬如K近鄰,K-Means聚類中,無量綱化可以幫我們提升模型精度,避免某一個取值範圍特別大的特徵對距離計算造成影響。(一個特例是決策樹和樹的集成算法們,對決策樹我們不需要無量綱化,決策樹可以把任意數據都處理得很好。)

數據的無量綱化可以是線性的,也可以是非線性的。線性的無量綱化包括
中心化(Zero-centered或者Mean-subtraction)處理縮放處理(Scale)。

  1. 中心化的本質是讓所有記錄減去一個固定值,即讓數據樣本數據平移到某個位置
  2. 縮放的本質是通過除以一個固定值,將數據固定在某個範圍之中,取對數也算是一種縮放處理。

一、數據歸一化

  • preprocessing.MinMaxScaler

當數據(x)按照最小值中心化後,再按極差(最大值 - 最小值)縮放,數據移動了最小值個單位,並且會被收斂到[0,1]之間,而這個過程,就叫做數據歸一化(Normalization,又稱Min-Max Scaling)。注意,Normalization是歸一化,不是正則化,真正的正則化是regularization,不是數據預處理的一種手段。歸一化之後的數據服從正態分佈,公式如下:
在這裏插入圖片描述
在sklearn當中,我們使用preprocessing.MinMaxScaler來實現這個功能。MinMaxScaler有一個重要參數,feature_range控制我們希望把數據壓縮到的範圍,默認是[0,1]。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

二、數據標準化

  • preprocessing.StandardScaler
    當數據(x)按均值(μ)中心化後,再按標準差(σ)縮放,數據就會服從爲均值爲0,方差爲1的正態分佈(即標準正態分佈),而這個過程,就叫做數據標準化(Standardization,又稱Z-score normalization),公式如下:
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
    對於StandardScaler和MinMaxScaler來說,空值NaN會被當做是缺失值,在fit的時候忽略,在transform的時候保持缺失NaN的狀態顯示。並且,儘管去量綱化過程不是具體的算法,但在fit接口中,依然只允許導入至少二維數組,一維數組導入會報錯。通常來說,我們輸入的X會是我們的特徵矩陣,現實案例中特徵矩陣不太可能是一維,所以不會存在這個問題。

  • StandardScaler和MinMaxScaler選哪個?
    看情況。大多數機器學習算法中,會選擇StandardScaler來進行特徵縮放因爲MinMaxScaler對異常值非常敏感。在PCA,聚類,邏輯迴歸,支持向量機,神經網絡這些算法中,StandardScaler往往是最好的選擇。
    MinMaxScaler在不涉及距離度量、梯度、協方差計算以及數據需要被壓縮到特定區間時使用廣泛,比如數字圖像處理中量化像素強度時,都會使用MinMaxScaler將數據壓縮於[0,1]區間之中。

建議先試試看StandardScaler,效果不好換MinMaxScaler。

除了StandardScaler和MinMaxScaler之外,sklearn中也提供了各種其他縮放處理(中心化只需要一個pandas廣播一下減去某個數就好了,因此sklearn不提供任何中心化功能)。比如,在希望壓縮數據,卻不影響數據的稀疏性時(不影響矩陣中取值爲0的個數時),我們會使用MaxAbsScaler;在異常值多,噪聲非常大時,我們可能會選用分位數來無量綱化,此時使用RobustScaler。更多詳情請參考以下列表。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章