数据规范化(归一化)处理:消除指标间的量纲和取值范围差异的影响。 前提是数据格式统一;一些数据挖掘算法,特别是某些基于距离的聚类和分类算法,例如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位小数
一些数据挖掘算法,特别是某些分类算法,例如(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)
数据构造方法 | 方法描述 | 函数 | 将不同属性的值通过函数进行计算,或通过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)) }
|