
數據的標准化(Normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除數據的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權。其中最典型的就是0-1標准化和Z標准化。
由於不同變量樣本常常具有不同的單位和不同大小的數量值。如第一個變量的單位是kg,第二個變量的單位是cm,在計算絕對距離時將出現將兩個變量樣本值絕對值之差相加的情況,這時兩個絕對值的單位不一致(如,3kg+5cm=?),產生矛盾;不同樣本數量值差異相差較大時,會使在計算出的關系系數中,不同變量所占的比重大不相同。例如如果第一個變量的數值在2%到4%之間,而第二個變量的數值范圍都在1000與5000之間,第二個變量將決定關系系數;如果變量量綱相同、數量等級接近,變量樣本間差異顯著,對計算結果也會產生較大影響。為了消除量綱影響和數值大小的影響,故將數據標准化。
數據標准化的主要方法有歸一化方法、中心化方法和定基比率法。
1、歸一化方法
也叫離差標准化,是對原始數據的線性變換,使結果落到[0,1]區間。
設有樣本\(X_1,X_2,\dots,X_n\),樣本最大值為\(max(X_i)\),樣本最小值為\(min(X_i)\),歸一化公式為:
如果將分子改為\(max(X_i)-X_i\),則有歸一化公式為:
數據歸一化方法可以將樣本數據壓縮到0-1之間,消除了不同變量樣本之間量綱和數量值得差異,使得不同變量樣本具有可比性。缺點是極大、極小值差異過大,會導致被壓縮的樣本失真,從而無法反映該變量樣本在計算有關距離或相似性時的真實作用。
例如,現有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
由於最小值的變化,轉換后的數據序列中,除了最大、最小值對應的樣本保持不變(仍為1、0)。較小樣本對應的轉換數據放大很多、較大樣本對應的轉換數據放大相對較少(最小成績為60,65轉為0.25、76轉為0.8;最小成績為30,65轉為0.625、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);
2、中心化方法
數據中心化方法也叫標准差標准化,經過處理的數據符合標准正態分布,即均值為0,標准差為1。
設有樣本\(X_1,X_2,\dots,X_n\),樣本平均數為\(\overline{X}\),樣本標准差為\(\sigma\),中心化公式為:
如果利用\(3\sigma\)進行中心化,樣本接近正態分布時,落在[-1,1]之間的概率是99.7%,在實際應用中可將落在[-1,1]區間之外的值均設成-1和1,以保證所有的數值均落在[-1,1]范圍之內。中心化公式為:
當樣本量較大時,個別極端值對樣本轉換產生的作用被大大消減。數據中心化方法可以將樣本數據壓縮到一定范圍內,消除了不同變量樣本之間量綱和數量值得差異,使得不同變量樣本具有可比性。缺點是數據壓縮范圍難以確定。
一維數組中心化函數代碼
## 函數
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);
3、定基比率法
定基比率法是選擇一個適當的數(樣本初始值、平均數、中位數、標准差或其它給定數值)為除數除以所有樣本,以便消除量綱和樣本數值的量級差別。
設有樣本\(X_1,X_2,\dots,X_n\),基數為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);
進行數據標准化處理方法靈活多樣,建議運用正態中心化方法。
4、獲得數組各列均值和樣本標准差
二維數組各列均值和樣本標准差函數代碼
## 函數
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);
注:此函數計算學習樣本各列數據的均值和樣本標准差,用於測試樣本的標准化
5、獲得數組各列最大值和最小值
二維數組各列最大值和最小值函數代碼
## 函數
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);
注:此函數計算學習樣本各列數據的最大值和最小值,用於測試樣本的標准化
6、將數組按給定均值和樣本標准差標准化
二維數組按給定均值和樣本標准差標准化函數代碼
## 函數
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標准化
7、將數組按給定最大值和最小值標准化
二維數組按給定最大值和最小值標准化函數代碼
## 函數
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:粘貼)運行效果