數(shù)據(jù)標(biāo)準(zhǔn)化(歸一化)處理是數(shù)據(jù)挖掘的一項基礎(chǔ)工作,不同評價指標(biāo)往往具有不同的量綱和量綱單位,這樣的情況會影響到數(shù)據(jù)分析的結(jié)果,為了消除指標(biāo)之間的量綱影響,需要進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理,以解決數(shù)據(jù)指標(biāo)之間的可比性。原始數(shù)據(jù)經(jīng)過數(shù)據(jù)標(biāo)準(zhǔn)化處理后,各指標(biāo)處于同一數(shù)量級,適合進(jìn)行綜合對比評價。以下是三種常用的歸一化方法:
min-max標(biāo)準(zhǔn)化(Min-Max Normalization)
也稱為離差標(biāo)準(zhǔn)化,是對原始數(shù)據(jù)的線性變換,使結(jié)果值映射到[0 , 1]之間。轉(zhuǎn)換函數(shù)如下:?
其中max為樣本數(shù)據(jù)的最大值,min為樣本數(shù)據(jù)的最小值。這種方法有個缺陷就是當(dāng)有新數(shù)據(jù)加入時,可能導(dǎo)致max和min的變化,需要重新定義。
min-max標(biāo)準(zhǔn)化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、對于方差非常小的屬性可以增強(qiáng)其穩(wěn)定性;
2、維持稀疏矩陣中為0的條目。
下面將數(shù)據(jù)縮至0-1之間,采用MinMaxScaler函數(shù)
from sklearn import preprocessing import numpy as np X = np.array([[ 1., -1., 2.], [ 2., 0., 0.], [ 0., 1., -1.]]) min_max_scaler = preprocessing.MinMaxScaler() X_minMax = min_max_scaler.fit_transform(X)
最后輸出:
array([[ 0.5 , 0. , 1. ],
????????? [ 1. , 0.5 , 0.33333333],?
????????? [ 0. , 1. , 0. ]])
測試用例:
注意:這些變換都是對列進(jìn)行處理。
當(dāng)然,在構(gòu)造類對象的時候也可以直接指定最大最小值的范圍:feature_range=(min, max),此時應(yīng)用的公式變?yōu)椋?
X_std=(X-X.min(axis=0))/(X.max(axis=0)-X.min(axis=0)) X_minmax=X_std/(X.max(axis=0)-X.min(axis=0))+X.min(axis=0))
Z-score標(biāo)準(zhǔn)化方法
也稱為均值歸一化(mean normaliztion), 給予原始數(shù)據(jù)的均值(mean)和標(biāo)準(zhǔn)差(standard deviation)進(jìn)行數(shù)據(jù)的標(biāo)準(zhǔn)化。經(jīng)過處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布,即均值為0,標(biāo)準(zhǔn)差為1。轉(zhuǎn)化函數(shù)為:?
其中? μ μ?為所有樣本數(shù)據(jù)的均值, σ σ為所有樣本數(shù)據(jù)的標(biāo)準(zhǔn)差。
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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
