分享

(三) 数据的变换

 hucy_Bioinfo 2021-08-19
导读

数据规范化(归一化)处理:消除指标间的量纲和取值范围差异的影响。

1. 规范化

前提是数据格式统一;一些数据挖掘算法,特别是某些基于距离的聚类和分类算法,例如kmeanslibsvm等,要求数据是[-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. 连续变量离散化

一些数据挖掘算法,特别是某些分类算法,例如(ID3Apriori算法等),要求数据是分类属性的形式,

因此,往往需要把连续的属性离散化。

数据离散化方法

方法描述

等宽法

将属性的值域分成具有相同宽度的区间

等频法

将相同数量的记录放进每个区间

一维聚类

通过聚类分析得到簇,合并到一个簇的连续属性值并为同一标记

#生成数据,min40 max 100 count 200

weight<-runif(200,40, 100)

# 自定义分组(等宽法)

group<-c(seq(40,100,10))

group

#weight按照自定义分组 group 进行离散化,自定义标签用17 表示

# 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,3682)

自定义函数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·

Keep Learning

超乎想象的体验

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多