數據的標準化(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:粘貼)
運行效果