登录
首页精彩阅读R语言:数据规范化、归一化
R语言:数据规范化、归一化
2017-04-29
收藏

R语言:数据规范化、归一化

笔者寄语:规范化主要是因为数据受着单位的影响较大,需要进行量纲化。大致有:最小-最大规范化、均值标准化、小数定标规范化
数据中心化和标准化的意义是一样的,为了消除量纲对数据结构的影响。

1、最小-最大规范化——标准化
也叫离差标准化,是对原始数据的线性变换,将数据映射到[0,1]之间,与功效系数法相同。
标准化    x-min(x) / max(x)-min(x)
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
    #最小-最大规范化  
    b1=(data[,1]-min(data[,1]))/(max(data[,1])-min(data[,1]))  
    b2=(data[,2]-min(data[,2]))/(max(data[,2])-min(data[,2]))  
    b3=(data[,3]-min(data[,3]))/(max(data[,3])-min(data[,3]))  
    b4=(data[,4]-min(data[,4]))/(max(data[,4])-min(data[,4]))  
    data_scatter=cbind(b1,b2,b3,b4) 
2、均值标准化法——正态化
正态标准差标准化、零均值规范化等方法,经过处理的数据均值为0,标准差为1。公式
为:
x*=(x-均值)/标准差
因为均值受离群值影响较大,也可以将均值替换成变量的中位数。
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
    #零-均值规范化  
    data_zscore=scale(data) 
3、小数定标规范化
移动变量的小数点位置来将变量映射到[-1,1]
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片

    #小数定标规范化  
    i1=ceiling(log(max(abs(data[,1])),10))#小数定标的指数  
    c1=data[,1]/10^i1  
    i2=ceiling(log(max(abs(data[,2])),10))  
    c2=data[,2]/10^i2  
    i3=ceiling(log(max(abs(data[,3])),10))  
    c3=data[,3]/10^i3  
    i4=ceiling(log(max(abs(data[,4])),10))  
    c4=data[,4]/10^i4  
    data_dot=cbind(c1,c2,c3,c4)  
      
    #打印结果  
    options(digits = 4)#控制输出结果的有效位数  
    data_dot 
代码中,log(x,10)是ln(x)一样;
options可以控制保留四位数小数
4、还原标准化的方法
[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
    preds=norm.data*sd(data)+mean(data)#还原标准化的数据 
5、R语言中的scale函数
scale方法中的两个参数center和scale的解释:
1.center和scale默认为真,即T或者TRUE
2.center为真表示数据中心化
3.scale为真表示数据标准化
中心化=源数据-均值
标准化==中心化之后的数据在除以数据集的标准差,即数据集中的各项数据减去数据集
的均值再除以数据集的标准差。
例如有数据集1, 2, 3, 6, 3,其均值为3,其标准差为1.87,那么标准化之后的数据集
为(1-3)/1.87,(2-3)/1.87,(3-3)/1.87,(6-3)/1.87,(3-3)/1.87,即:-1.069,-
0.535,0,1.604,0
那么以下几种情况是啥意思:
[plain] view plain copy
print?在CODE上查看代码片派生到我的代码片
    scale(x)=scale(x,center=T,scale=T),默认设置  
    scale(x,center=F,scale=T)代表不进行中心化,直接做标准化;  
    scale(x,center=T,scale=F)代表中心化  
    scale(x,center=F,scale=F)代表什么不做,是原来的数据列。 
那么与apply族联用

数据分析咨询请扫描二维码

客服在线
立即咨询