• 数据标准化


    (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} ]

    如果利用(3sigma)进行中心化,样本接近正态分布时,落在[-1,1]之间的概率是99.7%,在实际应用中可将落在[-1,1]区间之外的值均设成-1和1,以保证所有的数值均落在[-1,1]范围之内。中心化公式为:

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

    当样本量较大时,个别极端值对样本转换产生的作用被大大消减。数据中心化方法可以将样本数据压缩到一定范围内,消除了不同变量样本之间量纲和数量值得差异,使得不同变量样本具有可比性。缺点是数据压缩范围难以确定。

    一维数组中心化函数代码

    ## 函数
        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标准化


    代码窗口

    注:可将例题实例代码复制、粘贴到“代码窗口”,点击“运行代码”获得计算结果(鼠标选择实例代码$ ightarrow$Ctrl+C:复制$ ightarrow$鼠标点击“代码窗口”使其获得焦点$ ightarrow$Ctrl+V:粘贴)

    运行效果

  • 相关阅读:
    Spring Boot 环境变量读取 和 属性对象的绑定
    SpringMvc(4-1)Spring MVC 中的 forward 和 redirect(转)
    shiro实现登录安全认证(转)
    史上最全的开发工具类(转)
    Shiro权限管理框架详解
    js中退出语句break,continue和return 比较 (转)
    jQuery获取多种input值的方法(转)
    jquery常用方法总结(转)
    jQuery常用方法(持续更新)(转)
    idea+springboot+freemarker热部署(转)
  • 原文地址:https://www.cnblogs.com/cloudtj/p/6655646.html
Copyright © 2020-2023  润新知