1. 程式人生 > >scikit-learn中的歸一化、標準化處理

scikit-learn中的歸一化、標準化處理

什麼是歸一化:

歸一化就是把一組數(大於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)