美文网首页
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