美文网首页
2018-12-20

2018-12-20

作者: tshyguy | 来源:发表于2018-12-20 16:23 被阅读0次

熵权法用R实现

data=read.csv(file.choose());          #导入数据

func<-function(data,type){

#data:收集到的数据矩阵,行名是指标,列名是样本

#type:正指标为1,负指标为0

sum(is.na(data))

#归一化处理

min.max.norm<-function(x){

(max(x)-x)/max(x)-min(x))

}

max.min.norm<-function(x){

(x-min(x))/(max(x)-min(x))

}

data_1=data[lab==1,]

data_1=apply(data_1,2,min.max.norm)   #正向

data_0=data[lab==0,]

data_0=apply(data_0,2,max.min.norm)   #负向

data<-cbind(data_1,data_0)

#求出所有样本对指标Xj的贡献总量

first1 <- function(data)

{

  x <- c(data)

  for(i in 1:length(data))

    x[i] = data[i]/sum(data[])

  return(x)

}

dataframe <- apply(y,2,first1);

###将上步生成的矩阵每个元素变成每个元素与该ln(元素)的积并计算信息熵

first2 <- function(data)

{

  x <- c(data)

  for(i in 1:length(data)){

    if(data[i] == 0){

      x[i] = 0

    }else{

      x[i] = data[i] * log(data[i])

    }

  }

  return(x)

}

dataframe1 <- apply(dataframe,2,first2)   

k<- 1/log(length(dataframe1[,1]))      

e<- -k * colSums(dataframe1)   

###计算冗余度        

d=1-e   

###计算权重                           

w=d/sum(d)

相关文章

网友评论

      本文标题:2018-12-20

      本文链接:https://www.haomeiwen.com/subject/ataykqtx.html