1. 程式人生 > >資料歸一化及三種方法(python)

資料歸一化及三種方法(python)

資料標準化(歸一化)處理是資料探勘的一項基礎工作,不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到資料分析的結果,為了消除指標之間的量綱影響,需要進行資料標準化處理,以解決資料指標之間的可比性。原始資料經過資料標準化處理後,各指標處於同一數量級,適合進行綜合對比評價。以下是三種常用的歸一化方法:

min-max標準化(Min-Max Normalization)

也稱為離差標準化,是對原始資料的線性變換,使結果值對映到[0 , 1]之間。轉換函式如下: 
這裡寫圖片描述 
其中max為樣本資料的最大值,min為樣本資料的最小值。這種方法有個缺陷就是當有新資料加入時,可能導致max和min的變化,需要重新定義。

min-max標準化python程式碼如下:

import numpy as np

arr = np.asarray([0, 10, 50, 80, 100])
for x in arr:
    x = float(x - np.min(arr))/(np.max(arr)- np.min(arr))
    print x

# output
# 0.0
# 0.1
# 0.5
# 0.8
# 1.0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

使用這種方法的目的包括:

  • 1、對於方差非常小的屬性可以增強其穩定性;
  • 2、維持稀疏矩陣中為0的條目。

下面將資料縮至0-1之間,採用MinMaxScaler函式

  1. from sklearn import
     preprocessing   
  2. import numpy as np  
  3. X = np.array([[ 1., -1.,  2.],  
  4.               [ 2.,  0.,  0.],  
  5.               [ 0.,  1., -1.]])  
  6. min_max_scaler = preprocessing.MinMaxScaler()  
  7. X_minMax = min_max_scaler.fit_transform(X)  

最後輸出:
  1. array([[ 0.5       ,  0.        ,  1.        ],  
  2.        [ 1.        ,  0.5       ,  
    0.33333333],  
  3.        [ 0.        ,  1.        ,  0.        ]])  
測試用例:
  1. >>> X_test = np.array([[ -3., -1.,  4.]])  
  2. >>> X_test_minmax = min_max_scaler.transform(X_test)  
  3. >>> X_test_minmax  
  4. array([[-1.5       ,  0.        ,  1.66666667]])  

注意:這些變換都是對列進行處理。

當然,在構造類物件的時候也可以直接指定最大最小值的範圍:feature_range=(min, max),此時應用的公式變為:

  1. X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0))  
  2. X_minmax=X_std/(X.max(axis=0)-X.min(axis=0))+X.min(axis=0))  

Z-score標準化方法

也稱為均值歸一化(mean normaliztion), 給予原始資料的均值(mean)和標準差(standard deviation)進行資料的標準化。經過處理的資料符合標準正態分佈,即均值為0,標準差為1。轉化函式為: 
這裡寫圖片描述 
其中 μμ 為所有樣本資料的均值,σσ為所有樣本資料的標準差。

import numpy as np

arr = np.asarray([0, 10, 50, 80, 100])
for x in arr:
    x = float(x - arr.mean())/arr.std()
    print x

# output
# -1.24101045599
# -0.982466610991
# 0.0517087689995
# 0.827340303992
# 1.34442799399
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14