機器學習中數據特徵的處理 歸一化vs標準化,哪個更好

機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


眾所周知,特徵工程是將原始數據轉換為數據集的過程。 有各種可用的功能工程技術。 兩種最廣泛使用且最容易混淆的特徵工程技術是:

· 標準化

· 歸一化

今天我們將探討這兩種技術,並瞭解數據分析師在解決數據科學問題時所做出的一些常見假設。 另外,本教程的全部代碼都可以在下面的GitHub存儲庫中找到:

https://github.com/Tanu-N-Prabhu/Python/blob/master/NormalizationvsStandardization.ipynb

歸一化

理論

歸一化是將數字特徵轉換為標準值範圍的過程。 值的範圍可以是[-1,1]或[0,1]。 例如,假設我們有一個數據集,其中包含兩個名為"年齡"和"體重"的特徵,如下所示:

機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


假設一個名為"年齡"的要素的實際範圍是5到100。我們可以通過從"年齡"列的每個值中減去5,然後將結果除以95( 100-5)。 為了使您清晰可見,我們可以將以上內容寫為公式。

機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


其中min ^(j)

max ^(j)是數據集中特徵j的最小值和最大值。圖像來源於Andriy Burkov的《百頁機器學習書》

實例

現在您已經瞭解了背後的理論,現在讓我們看看如何將其投入實際。 通常,有兩種方法可以實現此目的:傳統的Old school手動方法,另一種使用sklearn預處理庫。 今天,讓我們藉助sklearn庫進行歸一化。

使用sklearn預處理-Normalizer

在將" Age"和" Weight"值直接輸入該方法之前,我們需要將這些數據幀轉換為numpy數組。 為此,我們可以使用to_numpy()方法,如下所示:

<code> 

y

= df[

'Weight'

]

X

= X.to_numpy()

y

= y.to_numpy()/<code>

上面的步驟非常重要,因為fit()和transform()方法僅適用於數組。

<code>

from

sklearn.preprocessing

import

Normalizernormalizer = Normalizer().fit([X]) normalizer.transform([X])/<code>
機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


<code>normalizer = Normalizer().fit([y])
normalizer.transform([y])/<code>
機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


如上所示,兩個數組的值都在[0,1]範圍內。

我們何時應實際對數據進行歸一化?

儘管歸一化不是強制性的(必須做的事)。 它可以通過兩種方式為您提供幫助

· 歸一化數據將提高學習速度。 它將在構建(訓練)和測試數據期間提高速度。 試試看!!

· 它將避免數值溢出。 意思是歸一化將確保我們的輸入大致在相對較小的範圍內。 這樣可以避免問題,因為計算機通常在處理非常小或非常大的數字時會遇到問題。

標準化

理論

標準化和z分數標準化和最小-最大縮放是一種重新縮放數據集值的技術,以使其具有標準正態分佈的屬性,其中μ= 0(均值-特徵的平均值)且σ= 1( 均值的標準偏差)。 可以這樣寫:

機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


實例

現在有很多方法可以實現標準化,就像標準化一樣,我們可以使用sklearn庫並使用StandardScalar方法,如下所示:

<code>

from

sklearn.preprocessing

import

StandardScalersc = StandardScaler() sc.fit_transform([X]) sc.transform([X])sc.fit_transform([y]) sc.transform([y])/<code>


Z分數標準化

同樣,我們可以使用pandas的mean和std來實現。

<code> 
df = (df - df.mean())/df.std()

print

(df)/<code>
機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


最小-最大縮放

在這裡我們可以使用pandas的max和min來做有需要的

<code> 
df = (df-df.min())/(df.max()-df.min())
 

print

(df)/<code>
機器學習中數據特徵的處理 歸一化vs標準化,哪個更好


通常,最好使用Z分數標準化,因為最小-最大縮放容易過度擬合。

什麼時候使用標準化?

上述問題沒有答案。 如果您的數據集較小且有足夠的時間

,則可以嘗試上述兩種技術並選擇最佳的一種。 以下是您可以遵循的經驗:

· 您可以對無監督學習算法使用標準化。 在這種情況下,標準化歸一化更有利。

· 如果您在數據中看到一個曲線,那麼標準化是更可取的。 為此,您將必須繪製數據。

· 如果您的數據集具有極高或極低的值(離群值),則標準化是更可取的,因為通常,歸一化會將這些值壓縮到較小的範圍內。

除上述情況外,在任何其他情況下,歸一化都適用。 同樣,如果您有足夠的時間可以嘗試兩種特徵工程技術。

作者:Tanu N Prabhu

翻譯:孟翔傑


分享到:


相關文章: