pandas:數據規範化方法與python實現

這裏就不說爲什麼要做數據規範化了,直接講幾種規範化的方法。

有許多規範化的方法,我們將學習種:最大-最小規範化、z分數規範化、小數定標規範化。這裏令A是數值屬性,具有n個觀測值v_{1},v_{2},...,v_{n}

一、原理

1.最大-最小規範化

假設min_{A}max_{A}分別爲屬性A的最大值和最小值。最小-最大規範化通過計算

           v_{i}^{'}=\frac{v_{i}-min_{A}}{max_{A}-min_{A}}(newmax_{A}-newmin_{A}) + newmin_{A}

把A的值v_{i}映射到區間newmin_{A},newmax_{A}中的v_{i}^{'}

最小-最大規範化保持原始數據值之間的聯繫。如果今後的輸入實例落在A的原數據值域之外,則該方法將面臨“越界”錯誤。

2.z分數(z-score)規範化(或零均值規範化)

屬性 A的值基於 A的均值(即平均值)和標準差規範化。A的值v_{i}被規範化爲v_{i}^{'},由下式計算:

           v_{i}^{'}=\frac{v_{i}-\overline{A}}{\sigma_{A}}

其中,\overline{A}\sigma _{A}分別爲屬性 A 的均值和標準差。

上面的標準差可以用均值絕對偏差替換。 A的均值絕對偏差(mean absolute deviation) s_{A}定義爲

           s_{A}=\frac{1}{n}(\left | v_{1}-\overline{A} \right | + \left |v_{2}-\overline{A} \right |+...+\left | v_{n}-\overline{A} \right |)

這樣,使用均值絕對差的 z分數規範化爲

           v_{i}^{'}=\frac{v_{i}-\overline{A}}{s_{A}}

對於離羣點,均值絕對偏差s_{A} 比標準差更加魯棒。在計算均值絕對偏差時,不對到均值的偏差即(\left | x_{i}-\overline{x} \right |)取平方,因此離羣點的影響多少有點降低。

3.小數定標規範化

小數定標規範化通過移動屬性A值的小數定位置進行規範化。小數點的移動位數依賴於A的最大絕對值。A的值v_{i}被規範化爲v_{i}^{'},由下式計算:

            v_{i}^{'}=\frac{v_{i}}{10^{j}}

其中j是使得max(v_{i}^{'})<1的最小整數。

舉例:

假設 A的取值由 -986917A 的最大絕對值爲 986。因此,爲使用小數定標規範化,我們用 1000(即j=3)除每個值。因此, -986被規範化爲 -0.986,而 917被規範化爲 0.917

注意,規範化可能將原來的數據改變很多,特別是使用 z分數規範化或小數定標規範化時尤其如此。有必要保留規範化參數(如均值和標準差,如果使用 z分數規範化的話),以便將來的數據可以用一致的方式規範化。

4.歸一化方法

由下式進行計算:

            y_{i}=\frac{x_{i}}{\sum_{i=1}^{n}x_{i}}

y_{i}\in [0,1]且無量綱,並且顯然有\sum_{i=1}^{n}y_{i}=1

二、代碼實現

#-*- 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())) #小數定標規範化

 

 

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