(三) 数据的变换
数据规范化(归一化)处理:消除指标间的量纲和取值范围差异的影响。
1. 规范化
前提是数据格式统一;一些数据挖掘算法,特别是某些基于距离的聚类和分类算法,例如kmeans,libsvm等,要求数据是[-1,1],或者是[0-1],因此,往往需要把数据进行归一化或规范化处理;
数据规范化方法 |
方法描述 |
最小-最大规范化 |
(x - min)/(max - min) |
零-均值规范化 |
(x - avg(x))/σ |
小数定标规范化 |
通过移动数据的小数点位置来进行标准化 |
#最小最大规范化
normValue1=(dfDeathsMalaria$value-min(dfDeathsMalaria$value))/(max(dfDeathsMalaria$value)-min(dfDeathsMalaria$value))
#零-均值规范化
normValue2=scale(dfDeathsMalaria$value)
#小数定标规范化
index=ceiling(log(max(abs(dfDeathsMalaria$value)),10))#ceiling:向上舍入取接近的整数
normValue3=dfDeathsMalaria$value/10^index
#打印结果
data_norm=cbind(normValue1,normValue2,normValue3)
round(data_norm,3) #四舍五入,保留3位小数
2. 连续变量离散化
一些数据挖掘算法,特别是某些分类算法,例如(ID3,Apriori算法等),要求数据是分类属性的形式,
因此,往往需要把连续的属性离散化。
数据离散化方法 |
方法描述 |
等宽法 |
将属性的值域分成具有相同宽度的区间 |
等频法 |
将相同数量的记录放进每个区间 |
一维聚类 |
通过聚类分析得到簇,合并到一个簇的连续属性值并为同一标记 |
#生成数据,min40 max 100 count 200
weight<-runif(200,40, 100)
# 自定义分组(等宽法)
group<-c(seq(40,100,10))
group
#将weight按照自定义分组 group 进行离散化,自定义标签用1:7 表示
# group长度7,有6个区间
weight.group<-cut(weight,breaks=group, labels=1:(length(group)-1))
# 结果合并
weight<-data.frame(weight,weight.group)
head(weight)
3. 新属性构造
数据构造方法 |
方法描述 |
函数 |
将不同属性的值通过函数进行计算,或通过if-else对值进行逻辑判断 |
小波变换 |
把非平稳信号分解为表达不同层次、不同频带信息的数据序列,即小波系数 |
#模拟生成119个患者的年龄数据
ageArray<-runif(119,36, 82)
# 自定义函数if-else
ageStats<-function(age){
if(30<age&age<50){
result<-1
}
elseif(50<=age&age<70){
result<-2
}
else{
result<-3
}
result
}
#用打印结果
for(ageinageArray){
print(ageStats(age))
}
·END·
超乎想象的体验