数据标准化 - 数据挖掘算法(1)

(2017-04-01 银河统计)

数据的标准化(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)\),归一化公式为:

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

如果将分子改为\(max(X_i)-X_i\),则有归一化公式为:

\[_{max}Y_i=\frac{max(X_i)-X_i}{max(X_i)-min(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\)进行归一化,结果如下:

原始样本数据67747665807260776578
变化样本数据67747665807240776578
原始转换数据0.650.30.20.7500.410.150.750.1
原始转换数据0.3250.150.10.37500.210.0750.3750.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\),中心化公式为:

\[_{\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);

3、定基比率法

定基比率法是选择一个适当的数(样本初始值、平均数、中位数、标准差或其它给定数值)为除数除以所有样本,以便消除量纲和样本数值的量级差别。

设有样本\(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);

进行数据标准化处理方法灵活多样,建议运用正态中心化方法。

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:粘贴)

运行效果

posted @ 2017-04-01 13:37  银河统计  阅读(6560)  评论(0编辑  收藏  举报