眾所周知,特徵工程是將原始數據轉換為數據集的過程。 有各種可用的功能工程技術。 兩種最廣泛使用且最容易混淆的特徵工程技術是:
標準化歸一化今天我們將探討這兩種技術,並了解數據分析師在解決數據科學問題時所做出的一些常見假設。
歸一化
理論
歸一化是將數字特徵轉換為標準值範圍的過程。 值的範圍可以是[-1,1]或[0,1]。 例如,假設我們有一個數據集,其中包含兩個名為「年齡」和「體重」的特徵,如下所示:
假設一個名為「年齡」的要素的實際範圍是5到100。我們可以通過從「年齡」列的每個值中減去5,然後將結果除以95( 100-5)。 為了使您清晰可見,我們可以將以上內容寫為公式。
其中min ^(j)和max ^(j)是數據集中特徵j的最小值和最大值。圖像來源於Andriy Burkov的《百頁機器學習書》
實例
現在您已經了解了背後的理論,現在讓我們看看如何將其投入實際。 通常,有兩種方法可以實現此目的:傳統的Old school手動方法,另一種使用sklearn預處理庫。 今天,讓我們藉助sklearn庫進行歸一化。
使用sklearn預處理-Normalizer
在將「 Age」和「 Weight」值直接輸入該方法之前,我們需要將這些數據幀轉換為numpy數組。 為此,我們可以使用to_numpy()方法,如下所示:
# Storing the columns Age values into X and Weight as YX = df['Age']y = df['Weight']X = X.to_numpy()y = y.to_numpy()
上面的步驟非常重要,因為fit()和transform()方法僅適用於數組。
from sklearn.preprocessing import Normalizernormalizer = Normalizer().fit([X])normalizer.transform([X])
normalizer = Normalizer().fit([y])normalizer.transform([y])
如上所示,兩個數組的值都在[0,1]範圍內。
我們何時應實際對數據進行歸一化?
儘管歸一化不是強制性的(必須做的事)。 它可以通過兩種方式為您提供幫助
歸一化數據將提高學習速度。 它將在構建(訓練)和測試數據期間提高速度。 試試看!!它將避免數值溢出。 意思是歸一化將確保我們的輸入大致在相對較小的範圍內。 這樣可以避免問題,因為計算機通常在處理非常小或非常大的數字時會遇到問題。標準化
理論
標準化和z分數標準化和最小-最大縮放是一種重新縮放數據集值的技術,以使其具有標準正態分布的屬性,其中μ= 0(均值-特徵的平均值)且σ= 1( 均值的標準偏差)。 可以這樣寫:
實例
現在有很多方法可以實現標準化,就像標準化一樣,我們可以使用sklearn庫並使用StandardScalar方法,如下所示:
from sklearn.preprocessing import StandardScalersc = StandardScaler()sc.fit_transform([X])sc.transform([X])sc.fit_transform([y])sc.transform([y])
Z分數標準化
同樣,我們可以使用pandas的mean和std來實現。
# Calculating the mean and standard deviationdf = (df - df.mean())/df.std()print(df)
最小-最大縮放
在這裡我們可以使用pandas的max和min來做有需要的
# Calculating the minimum and the maximum df = (df-df.min())/(df.max()-df.min())print(df)
通常,最好使用Z分數標準化,因為最小-最大縮放容易過度擬合。
什麼時候使用標準化?
上述問題沒有答案。 如果您的數據集較小且有足夠的時間,則可以嘗試上述兩種技術並選擇最佳的一種。 以下是您可以遵循的經驗:
您可以對無監督學習算法使用標準化。 在這種情況下,標準化比歸一化更有利。如果您在數據中看到一個曲線,那麼標準化是更可取的。 為此,您將必須繪製數據。如果您的數據集具有極高或極低的值(離群值),則標準化是更可取的,因為通常,歸一化會將這些值壓縮到較小的範圍內。除上述情況外,在任何其他情況下,歸一化都適用。 同樣,如果您有足夠的時間可以嘗試兩種特徵工程技術。
作者:Tanu N Prabhu
翻譯:孟翔傑