1. 数据的标准化和正态化变换
数据挖掘过程中,不同变量数据单位不一,比如,我们想知道一个人身体健康状况,其身高是180cm,体重是80kg,视力是2.5,心跳是70/min,这些指标都是描述一个人身体状况的数据,这些单一不一的指标会对建模的准确度有一定影响。因此,在数据挖掘之前,我们要对数据做标准化处理。
另外,建模之后,我们产生了有价值的目标变量数据,但是这些数据都是标准化数据形式,跟实际业务问题的需求有一定偏差。如此,源拆需要对数据做一定的变换,比如使其接近正态分布,这样从数据形式上可以对业务问题有更好的解释。
数据标准化有很多形式,这里简单总结三种,如下:
假设我们有一个X向量,x(i,j),i = 1,..,m;j = 1,..,n。z_score规范化如下:
x(i,j)' = [x(i,j) - E(j)] / S[j] ,即x(i,j)减去第j列的均值再除以第j列的标准差。
这样处理之后,原数据就变成了均值为0,方差为1,记作:
X' = [X - E(X)] / S(X) ,其中,E(X) = 0, S(X) = 1。
假设我们有让裂弯一个X向量,x(i,j),i = 1,..,m;j = 1,..,n。中心化如下:
x(i,j)' = x(i,j) - E(j) ,E(j)是第j列的均值。
如此变化以后,均值为0,但是方差矩阵不变。
假设我们有一个X向量,x(i,j),i = 1,..,m;j = 1,..,n。极差标准化如下:
x(i,j) = [x(i,j) - E(j)]/ ( max(j) - min(j) .
这样变换后,均值为0,方差为1.
小数定标规范化通过移动数据A的小数点位置进行规范化。小数点的移动位置依赖数据A的最大值。由下式计算:|max(A)|<1的最小整数。假设A的取值为-986 ~ 917,A的最大绝对值为986,使用小数定标规范化,用1000除以每个值,这样-986标准化为-0.986,917则为0.917.
注意:极差标准化和小数定标规范化都改变了原数据,如果想统一转换为原数据比较麻烦。所以可以尽量通过前两种方法来做规范化。
R语言中有现成的函数,比如scale,可以通过设置scale的参数来实现z_score和中心化的数据标准化,具体参考?scale.
当然,可以可以自己写一个规范化函数,如下:
数据正态化,目的是稳定方差,直线化,使数据分布正态或者接近正态。
如果y = f(x) 是x的线性函数,不影响分析;但是如果是非线性函数,y和x的表现就完全不同,包括分布,方差和数据间关系也会不同。
这个不做过多解释,请参考 这里
Box-Cox在1964年从实际数坦闷据出发提出了一个很有效的变换,如下:
y = ifelse(k = 0,log(y),[y^k-1]/k) ,此变换有如下特点:
实际应用中,Box-Cox还有个扩展式,如下:
y = ifelse(k1 = 0,log(y+k2),[(y +k2)^k1-1]/k1) ,任意y,保证y+k2>0,即k2已知,k1为参数。
请参考这个文章, Box-Cox Transformation
1, Box-Cox Transform: An Overview
2, Box-Cox变换
3, 统计学与R语言笔记-徐俊晓
2. 何为数据要中心化和标准化其目的是什么
数据标准化是指:数值减去均值,再除以标准差。
数据中心化是指:变量减去它的均值。
数据中心化和标准化在回归分析中的意义是取消由于量纲不同、自身变异或者数值相差较大所引起的误差。