數據標準化 - 數據挖掘算法(1)

(2017-04-01 銀河統計)

數據的標準化(Normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中常常會用到,去除數據的單位限制,將其轉化爲無量綱的純數值,便於不一樣單位或量級的指標可以進行比較和加權。其中最典型的就是0-1標準化和Z標準化。web

因爲不一樣變量樣本經常具備不一樣的單位和不一樣大小的數量值。如第一個變量的單位是kg,第二個變量的單位是cm,在計算絕對距離時將出現將兩個變量樣本值絕對值之差相加的狀況,這時兩個絕對值的單位不一致(如,3kg+5cm=?),產生矛盾;不一樣樣本數量值差別相差較大時,會使在計算出的關係係數中,不一樣變量所佔的比重大不相同。例如若是第一個變量的數值在2%到4%之間,而第二個變量的數值範圍都在1000與5000之間,第二個變量將決定關係係數;若是變量量綱相同、數量等級接近,變量樣本間差別顯著,對計算結果也會產生較大影響。爲了消除量綱影響和數值大小的影響,故將數據標準化。數組

數據標準化的主要方法有歸一化方法、中心化方法和定基比率法。函數

一、歸一化方法學習

也叫離差標準化,是對原始數據的線性變換,使結果落到[0,1]區間。測試

設有樣本\(X_1,X_2,\dots,X_n\),樣本最大值爲\(max(X_i)\),樣本最小值爲\(min(X_i)\),歸一化公式爲:spa

\[_{min}Y_i=\frac{X_i-min(X_i)}{max(X_i)-min(X_i)}\]code

若是將分子改成\(max(X_i)-X_i\),則有歸一化公式爲:orm

\[_{max}Y_i=\frac{max(X_i)-X_i}{max(X_i)-min(X_i)}\]blog

數據歸一化方法能夠將樣本數據壓縮到0-1之間,消除了不一樣變量樣本之間量綱和數量值得差別,使得不一樣變量樣本具備可比性。缺點是極大、極小值差別過大,會致使被壓縮的樣本失真,從而沒法反映該變量樣本在計算有關距離或類似性時的真實做用。rem

例如,現有10名學生的數學成績,

67, 74, 76, 65, 80, 72, 60, 77, 65, 78

最高分和最低分分別爲80和60,依據歸一化公式\(_{min}Y_i\),數據歸一化爲,

0.35, 0.7, 0.8, 0.25, 1, 0.6, 0, 0.85, 0.25, 0.9

若是這10名學生的數學成績最低分60分變爲40分,其餘學生成績不變,即,

67, 74, 76, 65, 80, 72, 40, 77, 65, 78

最高分和最低分分別爲80和40,依據歸一化公式\(_{min}Y_i\),數據歸一化爲,

0.675, 0.85, 0.9, 0.625, 1, 0.8, 0, 0.925, 0.625, 0.95

因爲最小值的變化,轉換後的數據序列中,除了最大、最小值對應的樣本保持不變(仍爲一、0)。較小樣本對應的轉換數據放大不少、較大樣本對應的轉換數據放大相對較少(最小成績爲60,65轉爲0.2五、76轉爲0.8;最小成績爲30,65轉爲0.62五、76轉爲0.9)。

樣本全距過大,歸一化後的數據間的差別性減少,計算有關距離或類似性的貢獻下降。

在上面的實例中,能夠改用公式\(_{max}Y_i\)進行歸一化,結果以下:

原始樣本數據 67 74 76 65 80 72 60 77 65 78
變化樣本數據 67 74 76 65 80 72 40 77 65 78
原始轉換數據 0.65 0.3 0.2 0.75 0 0.4 1 0.15 0.75 0.1
原始轉換數據 0.325 0.15 0.1 0.375 0 0.2 1 0.075 0.375 0.05

總之,不管用那種歸一化公式,樣本中個別極端值都會對全部轉換數據產生顯著影響,在使用歸一化標準化方法時須要注意。

\(_{min}Y_i\)函數代碼

## 函數
    webTJ.Datamining.getYmin(arr);
##參數
    【arr】
    【一維數組】

注:數據挖掘類函數爲webTJ.Datamining

\(_{max}Y_i\)函數代碼

## 函數
    webTJ.Datamining.getYmax(arr);
##參數
    【arr】
    【一維數組】

代碼樣例

webTJ.clear();
var oArr=[67,74,76,65,80,72,60,77,65,78];
var oYmin=webTJ.Datamining.getYmin(oArr);
webTJ.display("Ymin = "+oYmin,0);
var oYmax=webTJ.Datamining.getYmax(oArr);
webTJ.display("Ymax = "+oYmax,0);

進行數據挖掘時,通常是對多維變量進行數據標準化處理,這時用二維數組描述的多維變量樣本,對應多維數據歸一化類函數爲,

\(_{min}YS_i\)函數代碼

## 函數
    webTJ.Datamining.getYSmin(arrs);
##參數
    【arrs】
    【二維數組】

\(_{max}YS_i\)函數代碼

## 函數
    webTJ.Datamining.getYSmax(arrs);
##參數
    【arrs】
    【二維數組】

代碼樣例

webTJ.clear();
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oYSmin=webTJ.Datamining.getYSmin(oArrs);
webTJ.show(oYSmin,2);
var oYSmax=webTJ.Datamining.getYSmax(oArrs);
webTJ.show(oYSmax,2);

二、中心化方法

數據中心化方法也叫標準差標準化,通過處理的數據符合標準正態分佈,即均值爲0,標準差爲1。

設有樣本\(X_1,X_2,\dots,X_n\),樣本平均數爲\(\overline{X}\),樣本標準差爲\(\sigma\),中心化公式爲:

\[_{\sigma}Y_i=\frac{X_i-\overline{X}}{\sigma}\]

若是利用\(3\sigma\)進行中心化,樣本接近正態分佈時,落在[-1,1]之間的機率是99.7%,在實際應用中可將落在[-1,1]區間以外的值均設成-1和1,以保證全部的數值均落在[-1,1]範圍以內。中心化公式爲:

\[_{3\sigma}Y_i=\frac{X_i-\overline{X}}{3\sigma}\]

當樣本量較大時,個別極端值對樣本轉換產生的做用被大大消減。數據中心化方法能夠將樣本數據壓縮到必定範圍內,消除了不一樣變量樣本之間量綱和數量值得差別,使得不一樣變量樣本具備可比性。缺點是數據壓縮範圍難以肯定。

一維數組中心化函數代碼

## 函數
    webTJ.Datamining.getYZarr(arr,k);
##參數
    【arr,k】
    【一維數組,k倍標準差】

注:k=1按1倍標準差中心化、k=3按3倍標準差中心化

代碼樣例

webTJ.clear();
var oArr=[67,74,76,65,80,72,60,77,65,78];
var oZarr=webTJ.Datamining.getYZarr(oArr,1);
webTJ.display("1倍標準差中心化 : "+oZarr,0);
oZarr=webTJ.Datamining.getYZarr(oArr,3);
webTJ.display("3倍標準差中心化 : "+oZarr,0);

對於多維變量進行數據標準化處理,用二維數組描述的多維變量樣本,對應多維數據中心化類函數爲,

二維數組中心化函數代碼

## 函數
    webTJ.Datamining.getYZarrs(arrs,k);
##參數
    【arrs,k】
    【二維數組,k倍標準差】

注:k=1按1倍標準差中心化、k=3按3倍標準差中心化

代碼樣例

webTJ.clear();
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oYZarrs=webTJ.Datamining.getYZarrs(oArrs,1);
webTJ.show(oYZarrs,2);
oYZarrs=webTJ.Datamining.getYZarrs(oArrs,3);
webTJ.show(oYZarrs,2);

三、定基比率法

定基比率法是選擇一個適當的數(樣本初始值、平均數、中位數、標準差或其它給定數值)爲除數除以全部樣本,以便消除量綱和樣本數值的量級差異。

設有樣本\(X_1,X_2,\dots,X_n\),基數爲V,定基比率爲,

\[_{rate}Y_i=\frac{X_i}{V}\]

定基比率法的優勢是基數選擇比較靈活,但數據壓縮範圍不宜肯定。

一維數組定基比率法函數代碼

## 函數
    webTJ.Datamining.getYRate(arr,v);
##參數
    【arr,v】
    【一維數組,基數】

注:應根據樣本計算出基數v,或先給定基數v

代碼樣例

webTJ.clear();
var oArr=[67,74,76,65,80,72,60,77,65,78];
var oArr1=oArr.slice(0); //複製數組
var oMedian=webTJ.Formula.getMedian(oArr);
var oRarr=webTJ.Datamining.getYRate(oArr1,oMedian);
webTJ.display("按中位數計算定基比率 : "+oRarr,0);

對於多維變量進行數據標準化處理,運用定基比率法時應首先計算數各樣本列的計算,而後再對全部樣本進行比率處理,函數及代碼爲,

二維數組比率法函數代碼

## 函數
    webTJ.Datamining.getYRates(arrs,crr);
##參數
    【arrs,crr】
    【二維數組,列基數值數組】

代碼樣例

webTJ.clear();
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oCols=oArrs[0].length; //得到數組列數
var oCrr=[]; //定義列基數數組
var oColData;
for (var i=0; i<oCols; i++) {
  oColData=webTJ.Array.getColData(oArrs,i); //得到數組i列
  oCrr[i]=webTJ.Formula.getMedian(oColData); //基數i列中位數
  } 
var oRarrs=webTJ.Datamining.getYRates(oArrs,oCrr); //按數組各列中位數計算比率
webTJ.show(oRarrs,2);

進行數據標準化處理方法靈活多樣,建議運用正態中心化方法。

四、得到數組各列均值和樣本標準差

二維數組各列均值和樣本標準差函數代碼

## 函數
    webTJ.Datamining.getCMSD(arrs);
##參數
    【arrs】
    【二維數組】

代碼樣例

webTJ.clear();
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oCMSD=webTJ.Datamining.getCMSD(oArrs);
webTJ.show(oCMSD,2);

注:此函數計算學習樣本各列數據的均值和樣本標準差,用於測試樣本的標準化

五、得到數組各列最大值和最小值

二維數組各列最大值和最小值函數代碼

## 函數
    webTJ.Datamining.getCExtremes(arrs);
##參數
    【arrs】
    【二維數組】

代碼樣例

webTJ.clear();
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oCExtremes=webTJ.Datamining.getCExtremes(oArrs);
webTJ.show(oCMSD,2);

注:此函數計算學習樣本各列數據的最大值和最小值,用於測試樣本的標準化

六、將數組按給定均值和樣本標準差標準化

二維數組按給定均值和樣本標準差標準化函數代碼

## 函數
    webTJ.Datamining.getSZarr(arrs,marrs);
##參數
    【arrs,marrs】
    【二維數組,數組各列均值和樣本標準差標數組】

代碼樣例

webTJ.clear();
var oSarrs=[[75,90,93,79,76,37],[72,69,66,64,81,75],[87,49,70,50,88,56]];
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oCMSD=webTJ.Datamining.getCMSD(oArrs);
var oZrrs=webTJ.Datamining.getSZarr(oSarrs,oCMSD);
webTJ.show(oZrrs,2);

注:此段代碼先計算學習樣本oArrs各列均值和標準差數組oCMSD,再用oCMSD將測試樣本oSarrs標準化

七、將數組按給定最大值和最小值標準化

二維數組按給定最大值和最小值標準化函數代碼

## 函數
    webTJ.Datamining.getSEarr(arrs,marrs,k);
##參數
    【arrs,marrs,k】
    【二維數組,數組各列最大值和最小值數組,最小或最大值標準化】

注:最小值標準化公式分子爲樣本值減最小值,k=0;最大值標準化公式分子爲最大值減樣本值,k=1

代碼樣例

webTJ.clear();
var oSarrs=[[75,90,93,79,76,37],[72,69,66,64,81,75],[87,49,70,50,88,56]];
var oStr="67,63,73,75,44,91|74,69,66,94,81,55|76,93,93,79,71,27|65,38,85,85,61,45|80,39,48,75,41,52|72,80,70,88,86,43|60,50,91,95,42,64|77,49,69,50,89,55|65,89,50,70,99,85|78,41,55,89,71,28";
var oArrs=webTJ.getArrs(oStr,"|",",");
oArrs=webTJ.Array.getQuantify(oArrs);
var oCExtremes=webTJ.Datamining.getCExtremes(oArrs);
var oSEarr=webTJ.Datamining.getSEarr(oSarrs,oCExtremes,0);
webTJ.show(oSEarr,2);

注:此段代碼先計算學習樣本oArrs各列最小值和最大值數組oCExtremes,再用oCExtremes將測試樣本oSarrs標準化


代碼窗口

注:可將例題實例代碼複製、粘貼到「代碼窗口」,點擊「運行代碼」得到計算結果(鼠標選擇實例代碼\(\rightarrow\)Ctrl+C:複製\(\rightarrow\)鼠標點擊「代碼窗口」使其得到焦點\(\rightarrow\)Ctrl+V:粘貼)

運行效果

相關文章
相關標籤/搜索