規範化與標準化,哪個更好
2022-07-24由 聞數起舞 發表于 林業
標準值是什麼意思
在本教程中,讓我們看看哪一個是所有功能中最好的特徵工程技術。
> Image credits to Author (Tanu Nanda Prabhu)
眾所周知,特徵工程是將原始資料轉換為資料集的問題。 有各種可用的功能工程技術。 兩種最廣泛使用且最容易混淆的特徵工程技術是:
· 正常化
· 標準化
今天在這個美麗的白天或黑夜,我們將探索這兩種技術,並瞭解資料分析師在解決資料科學問題時所做出的一些常見假設。 另外,本教程的全部程式碼都可以在下面的GitHub儲存庫中找到
規範化
理論
是將數字特徵轉換為標準值範圍的過程。 值的範圍可以是[-1,1]或[0,1]。 例如,假設我們有一個數據集,其中包含兩個名為“年齡”和“體重”的特徵,如下所示:
> Image Credits to Author (Tanu Nanda Prabhu)
假設一個名為“年齡”的要素的實際範圍是5到100。我們可以透過從“年齡”列的每個值中減去5,然後將結果除以95( 100-5)。 為了使您的大腦清晰可見,我們可以將以上內容寫為公式。
> Image credits to The Hundred-Page Machine Learning Book by Andriy Burkov
其中min ^(j)和max ^(j)是資料集中特徵j的最小值和最大值。
實作
現在您已經瞭解了背後的理論,現在讓我們看看如何將其投入生產。 通常,有兩種方法可以實現此目的:傳統的Old school手動方法,另一種使用sklearn預處理庫。 今天,讓我們藉助sklearn庫進行歸一化。
使用sklearn預處理-歸一化
在將“ Age”和“ Weight”值直接輸入該方法之前,我們需要將這些資料幀轉換為numpy陣列。 為此,我們可以使用to_numpy()方法,如下所示:
# Storing the columns Age values into X and Weight as Y
X = df[‘Age’]
y = df[‘Weight’]
X = X。to_numpy()
y = y。to_numpy()
上面的步驟非常重要,因為fit()和transform()方法僅適用於陣列。
from sklearn。preprocessing import Normalizer
normalizer = Normalizer()。fit([X])
normalizer。transform([X])
> Image credits to Author (Tanu Nanda Prabhu)
normalizer = Normalizer()。fit([y])normalizer。transform([y])
> Image credits to Author (Tanu Nanda Prabhu)
如上所示,兩個陣列的值都在[0,1]範圍內。 有關該庫的更多詳細資訊,可以在下面找到:
我們何時應實際對資料進行規範化?
儘管規範化不是強制性的,也不是強制性的(必須做的事)。 它可以透過兩種方式為您提供幫助
· 規範化資料將提高學習速度。 在構建(訓練)和測試資料期間,它將提高速度。 試試看!!
· 它將避免數值溢位。 真正的意思是規範化將確保我們的輸入大致在相對較小的範圍內。 這樣可以避免問題,因為計算機通常在處理非常小或非常大的數字時會遇到問題。
標準化
理論
標準化或z分數歸一化或最小-最大縮放是一種重新縮放資料集的值的技術,以使其具有標準正態分佈的屬性,其中μ= 0(均值-特徵的平均值)且σ= 1( 均值的標準偏差)。 可以這樣寫:
> Image credits to The Hundred-Page Machine Learning Book by Andriy Burkov
實作
現在有很多方法可以實現標準化,就像標準化一樣,我們可以使用sklearn庫並使用StandardScalar方法,如下所示:
from sklearn。preprocessing import StandardScaler
sc = 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)
> Image credits to Author (Tanu Nanda Prabhu)
最小-最大縮放
在這裡我們可以使用熊貓的最小和最大來做有需要的
# Calculating the minimum and the maximum
df = (df-df。min())/(df。max()-df。min())
print(df)
> Image credits to Author (Tanu Nanda Prabhu)
通常,最好使用Z分數歸一化,因為最小-最大縮放容易過度擬合。
什麼時候實際使用規範化和標準化?
上述問題沒有答案。 如果您的資料集很小並且有足夠的時間,則可以嘗試上述兩種技術並選擇最佳的一種。 您可以遵循以下經驗法則:
· 您可以對無監督學習演算法使用標準化。 在這種情況下,標準化比標準化更有利。
· 如果您在資料中看到一個曲線,那麼標準化是更可取的。 為此,您將必須繪製資料。
· 如果您的資料集具有極高或極低的值(離群值),則標準化是更可取的,因為通常,標準化會將這些值壓縮到較小的範圍內。
除上述情況外,在任何其他情況下,歸一化都適用。 同樣,如果您有足夠的時間嘗試兩種功能工程技術。
好了,你們已經到了教程的結尾。 我希望你們今天學到了一兩件事。 我使用名為“ Andriy Burkov的百頁機器學習書”的教科書作為參考(第5章)來編寫本教程。 您可以看一下。 如果您對本教程有任何疑問,可以使用下面的註釋部分。 我會盡快回答。 在此之前,請安全,再見。 下次見。 有關Datafied的更多更新,以讀寫更多python筆記本。
(本文翻譯自Tanu N Prabhu的文章《Normalization vs Standardization, which one is better》,參考:https://towardsdatascience。com/normalization-vs-standardization-which-one-is-better-f29e043a57eb)