数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。
其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上,常见的数据归一化的方法有:
min-max标准化(Min-max normalization)
也叫离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,转换函数如下:
![]()
其中max为样本数据的最大值,min为样本数据的最小值。这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。
log函数转换
通过以10为底的log函数转换的方法同样可以实现归一下,具体方法如下:
![]()
看了下网上很多介绍都是x*=log10(x),其实是有问题的,这个结果并非一定落到[0,1]区间上,应该还要除以log10(max),max为样本数据最大值,并且所有的数据都要大于等于1。
atan函数转换
用反正切函数也可以实现数据的归一化:
![]()
使用这个方法需要注意的是如果想映射的区间为[0,1],则数据都应该大于等于0,小于0的数据将被映射到[-1,0]区间上。
而并非所有数据标准化的结果都映射到[0,1]区间上,其中最常见的标准化方法就是Z标准化,也是SPSS中最为常用的标准化方法:
z-score 标准化(zero-mean normalization)
也叫标准差标准化,经过处理的数据符合标准正态分布,即均值为0,标准差为1,其转化函数为:
![]()
其中μ为所有样本数据的均值,σ为所有样本数据的标准差。
相关文章:






这篇文章很有用,收藏了。
牵扯到数学了都,数学学的不怎么好
真科学。。。一直在寻找这些
这个不错,应该再多一些的
@eagle: 这个确实可以在很多地方用到
好久没看到那么专业的东西了,收藏!
很好的总结,我会好好学习的,谢谢分享。
我想请问一下,如果是多个不同单位的数据,其中包含客流量(人数)、销售成功率(百分比)、销售额(货币单位)、平均每个客人消费金额(货币单位)。希望这几个数据能够以时间段,如小时(时间段内发生的以上数据)来分成若干组,将每组的数据用雷达图的方式来进行分析。那么这个数据的标准化应该如何来进行呢?看了您的文章后,我的理解,是不是要对每一组(具体某个时间段内的以上数据)数据进行标准化?使用LOG函数是否对于数据分析而言会更加具有可操作性?希望您能够抽空解答我的问题,谢谢
@般若: 你好,你说的根据小时(时间)来进行分组只是维度层面的不同,标准化是基于消除度量在量纲上的差异,跟维度没有关系,指标化之后你可以根据任何维度来进行展现。
至于标准化方法的选择需要根据度量的数值特征,Log函数适用于数值存在明显量级上差异的度量,如横跨了百、千、万的度量就可以选择Log函数,如果数值上没有这么大的差异,建议还是使用Min-Max或者Z标准化。
你好:
atan函数转换数据归一化,套用你上面的公式
我试验了一下,数据都是大于0的,用RANDBETWEEN(1000,10000)取了27个数据,映射并不是落在[0,1]区间的,问题出在哪里?
@atan函数转换数据归一化: 你好,这个公式得到的值应该是在[0,1]区间内的,你看下用的是不是反正切函数atan,另外有没有忘记除PI。