機器學習-數據歸一化方法

本文主要介紹兩種基本的數據歸一化方法。

歸一化方法有兩種形式,一種是把數變爲【0,1】之間的小數,一種是把有量綱表達式變爲無量綱表達式。

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

下面是歸一化和沒有歸一化的比較:

沒有經過歸一化,尋找最優解過程如下:


這裏寫圖片描述

經過歸一化,把各個特徵的尺度控制在相同的範圍內:


這裏寫圖片描述

從經驗上說,歸一化是讓不同維度之間的特徵在數值上有一定比較性,可以大大提高分類器的準確性。

以下是兩種常用的歸一化方法:

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

也稱爲離差標準化,是對原始數據的線性變換,使結果值映射到[0 - 1]之間。轉換函數如下:

x=xxminxmaxxmin

where,

xmin 表示樣本數據的最小值,xmax

Python代碼實現:

def Normalization(x):
    return [(float(i)-min(x))/float(max(x)-min(x)) for i in x]

測試:

x=[1,2,1,4,3,2,5,6,2,7]
b=Normalization(x)

Output:

[0.0, 0.16666666666666666, 0.0, 0.5, 0.3333333333333333, 0.16666666666666666, 0.6666666666666666, 0.8333333333333334, 0.16666666666666666, 1.0]

如果想要將數據映射到[-1,1],則將公式換成:

x=xxmeanxmaxxmin

x_mean表示數據的均值

Python代碼實現:

import numpy as np
def Normalization2(x):
    return [(float(i)-np.mean(x))/(max(x)-min(x)) for i in x]

測試:

x=[1,2,1,4,3,2,5,6,2,7]
b=Normalization2(x)

Output:

[-0.3833333333333333, -0.21666666666666665, -0.3833333333333333, 0.1166666666666667, -0.049999999999999968, -0.21666666666666665, 0.28333333333333338, 0.45000000000000001, -0.21666666666666665, 0.6166666666666667]

注意:上面的Normalization是處理單個列表的。

2.z-score標準化方法

這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。經過處理的數據符合標準正態分佈,即均值爲0,標準差爲1,轉化函數爲:

x=xμσ

其中,μ 表示所有樣本數據的均值,σ 表示所有樣本的標準差。

Python代碼實現:

import numpy as np
def z_score(x):
    x_mean=np.mean(x)
    s2=sum([(i-np.mean(x))*(i-np.mean(x)) for i in x])/len(x)
    return [(i-x_mean)/s2 for i in x]

測試:

x=[1,2,1,4,3,2,5,6,2,7]
print z_score(x)    

Output:

[-0.57356608478802995, -0.32418952618453861, -0.57356608478802995, 0.17456359102244395, -0.074812967581047343, -0.32418952618453861, 0.42394014962593524, 0.67331670822942646, -0.32418952618453861, 0.92269326683291775]


此文乃博主即興之作,如果你從中有所收穫,歡迎前來贊助,爲博主送上你的支持:【贊助中心】
新浪微博: 【@拾毅者】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章