這裏就不說爲什麼要做數據規範化了,直接講幾種規範化的方法。
有許多規範化的方法,我們將學習種:最大-最小規範化、分數規範化、小數定標規範化。這裏令是數值屬性,具有個觀測值。
一、原理
1.最大-最小規範化
假設和分別爲屬性的最大值和最小值。最小-最大規範化通過計算
把A的值映射到區間,中的。
最小-最大規範化保持原始數據值之間的聯繫。如果今後的輸入實例落在的原數據值域之外,則該方法將面臨“越界”錯誤。
2.分數(z-score)規範化(或零均值規範化)
屬性 的值基於 的均值(即平均值)和標準差規範化。的值被規範化爲,由下式計算:
其中,和分別爲屬性 的均值和標準差。
上面的標準差可以用均值絕對偏差替換。 的均值絕對偏差(mean absolute deviation) 定義爲
這樣,使用均值絕對差的 分數規範化爲
對於離羣點,均值絕對偏差 比標準差更加魯棒。在計算均值絕對偏差時,不對到均值的偏差即取平方,因此離羣點的影響多少有點降低。
3.小數定標規範化
小數定標規範化通過移動屬性值的小數定位置進行規範化。小數點的移動位數依賴於的最大絕對值。A的值被規範化爲,由下式計算:
其中是使得的最小整數。
舉例:
假設 的取值由 到 。 的最大絕對值爲 。因此,爲使用小數定標規範化,我們用 (即)除每個值。因此, 被規範化爲 ,而 被規範化爲 。
注意,規範化可能將原來的數據改變很多,特別是使用 分數規範化或小數定標規範化時尤其如此。有必要保留規範化參數(如均值和標準差,如果使用 分數規範化的話),以便將來的數據可以用一致的方式規範化。
4.歸一化方法
由下式進行計算:
則且無量綱,並且顯然有。
二、代碼實現
#-*- coding: utf-8 -*-
#數據規範化
import pandas as pd
import numpy as np
datafile = '../data/normalization_data.xls' #參數初始化
data = pd.read_excel(datafile, header = None) #讀取數據
(data - data.min())/(data.max() - data.min()) #最小-最大規範化
(data - data.mean())/data.std() #零-均值規範化
data/10**np.ceil(np.log10(data.abs().max())) #小數定標規範化