特徵預處理之歸一化&標準化

寫在前面

這篇博客的主要內容

  • 應用MinMaxScaler實現對特徵數據進行歸一化
  • 應用StandardScaler實現對特徵數據進行標準化

特徵預處理

定義

​ 通過一些轉換函數將特徵數據轉換成更加適合算法模型的特徵數據過程

特徵預處理API

sklearn.preprocessing

為什麼要進行歸一化/標準化?

​ 特徵的單位或者大小相差較大,或者某特徵的方差相比其他的特徵要大出幾個數量級容易影響(支配)目標結果,使得一些算法無法學習到其它的特徵

歸一化

定義

​ 通過對原始數據進行變換把數據映射到(默認為[0,1])之間

歸一化公式

作用於每一列,max為一列的最大值,min為一列的最小值,那麼X』』為最終結果,mx,mi分別為指定區間值默認mx為1,mi為0

API

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
    • MinMaxScalar.fit_transform(X)
      • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array

數據

milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1

代碼

from sklearn.preprocessing import MinMaxScaler
import pandas as pd
def minmax_demo():
    data = pd.read_csv("dating.txt")
    print(data)
    # 1、實例化一個轉換器類
    transfer = MinMaxScaler(feature_range=(2, 3))
    # 2、調用fit_transform
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("最小值最大值歸一化處理的結果:\n", data)

    return None

結果

歸一化運行結果

標準化

定義

​ 通過對原始數據進行變換把數據變換到均值為0,標準差為1範圍內

標準化公式

作用於每一列,mean為平均值,σ為標準差

API

  • sklearn.preprocessing.StandardScaler( )
    • 處理之後每列來說所有數據都聚集在均值0附近標準差差為1
    • StandardScaler.fit_transform(X)
      • X:numpy array格式的數據[n_samples,n_features]
    • 返回值:轉換後的形狀相同的array

數據

​ 同上歸一化介紹中使用的數據

代碼

from sklearn.preprocessing import StandardScaler
import pandas as pd
def stand_demo():
    data = pd.read_csv("dating.txt")
    print(data)
    transfer = StandardScaler()
    data = transfer.fit_transform(data[['milage','Liters','Consumtime']])
    print("標準化的結果:\n",data)
    print("每一列特徵的平均值:\n",transfer.mean_)
    print("每一列特徵的方差:\n",transfer.var_)
    return None

運行結果

標準化運行結果