scikit-learn中的歸一化、標準化處理
阿新 • • 發佈:2018-12-19
什麼是歸一化:
歸一化就是把一組數(大於1)化為以1為最大值,0為最小值,其餘資料按百分比計算的方法。如:1,2,3.,那歸一化後就是:0,0.5,1
歸一化步驟:
如:2,4,6
(1)找出一組數裡的最小值和最大值,然後就算最大值和最小值的差值
min = 2; max = 6; r = max - min = 4
(2)陣列中每個數都減去最小值
2,4,6 變成 0,2,4
(3)再除去差值r
0,2,4 變成 0,0.5,1 ,就得出歸一化後的陣列了
機器學習中歸一化與標準化處理。
在大多數的機器學習演算法和優化演算法中,將特徵值縮放到相同區間可以使得獲取效能更好的模型。就梯度下降演算法而言,例如有兩個不同的特徵,第一個特徵的取值範圍為1~10,第二個特徵的取值範圍為1~10000。在梯度下降演算法中,代價函式為最小平方誤差函式,所以在使用梯度下降演算法的時候,演算法會明顯的偏向於第二個特徵,因為它的取值範圍更大。在比如,k近鄰演算法,它使用的是歐式距離,也會導致其偏向於第二個特徵。對於決策樹和隨機森林以及XGboost演算法而言,特徵縮放對於它們沒有什麼影響。
python具體用法如下:歸一化和歸一化還原值(反歸一化)
import pandas as pd from sklearn.preprocessing import MinMaxScaler if __name__ == "__main__": #讀取葡萄酒資料集 data = pd.read_csv("G:/dataset/wine.csv") #獲取第二列Alcohol x =data["Alcohol"] #獲取資料的基本情況 print(x.describe()) minMax = MinMaxScaler() #將資料進行歸一化 x_std = minMax.fit_transform(x) #歸一化還原 origin_data = minMax.inverse_transform(x_std ) print(x_std)
標準化(standardization)
標準化比歸一化要更加實用,因為像邏輯斯蒂迴歸和支援向量機演算法,剛開始訓練的時候會將引數初始化為0或趨於0的隨機極小值,如果是標準化的資料(均值為0,方差為1)對於它們而言,這更加容易利於權重的更新。將特徵列標準化的計算公式如下:標準化和標準化還原。
import pandas as pd from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import StandardScaler if __name__ == "__main__": # 讀取葡萄酒資料集 data = pd.read_csv("G:/dataset/wine.csv") # 獲取第二列Alcohol x = data["Alcohol"] std = StandardScaler() #將x進行標準化 x_std = std.fit_transform(x) #歸一化還原 origin_data = std.inverse_transform(x_std ) print(x_std)