數據的標准化(normalization)是將數據按比例縮放,使之落入一個小的特定區間。目前數據標准化方法有多種,歸結起來可以分為直線型方法(如極值法、標准差法)、折線型方法(如三折線法)、曲線型方法(如半正態性分布)。不同的標准化方法,對系統的評價結果會產生不同的影響,然而不幸的是,在數據標准化方法的選擇上,還沒有通用的法則可以遵循。
常見的方法有:min-max標准化(Min-max normalization),log函數轉換,atan函數轉換,z-score標准化(zero-mena normalization,此方法最為常用),模糊量化法,均值歸一化。本文只介紹min-max標准化、Z-score標准化方法、均值歸一化、log函數轉換、atan函數轉換。
data = [1, 3, 4, 5, 2, 13, 23, 71, 11, 19, 9, 24, 38]
一、min-max標准化(Min-Max Normalization)
也稱為離差標准化,是對原始數據的線性變換,使結果值映射到[0 - 1]之間。轉換函數如下:
from __future__ import print_function, division # min-max標准化方法 data0 = [(x - min(data))/(max(data) - min(data)) for x in data]
二、Z-score標准化方法
這種方法給予原始數據的均值(mean)和標准差(standard deviation)進行數據的標准化。經過處理的數據符合標准正態分布,即均值為0,標准差為1,轉化函數為:
from __future__ import print_function import math # 均值 average = float(sum(data))/len(data) # 方差 total = 0 for value in data: total += (value - average) ** 2 stddev = math.sqrt(total/len(data)) # z-score標准化方法 data1 = [(x-average)/stddev for x in data]
三、均值歸一化
兩種方式,以max為分母的歸一化方法和以max-min為分母的歸一化方法
from __future__ import print_function # 均值 average = float(sum(data))/len(data) # 均值歸一化方法 data2_1 = [(x - average )/max(data) for x in data] data2_2 = [(x - average )/(max(data) - min(data)) for x in data]
四、log函數轉換方法
from __future__ import print_function import math # log2函數轉換 data3_1 = [math.log2(x) for x in data] # log10函數轉換 data3_2 = [math.log10(x) for x in data]
五、atan函數轉換方法
from __future__ import print_function import math # atan函數轉換方法 data4 = [math.atan(x) for x in data]