1
信息熵

信息熵是不确定性的一个度量,反映信息量的多少。信息量多少与随机事件发生概率有关,概率越大,不确定性越小,包含信息就越少,所以随机事件的信息量随着其发生概率递减。信息熵计算公式如下:

综合评价之熵权法_java

其中,xi为随机变量X的取值,p为随机事件xi发生的概率。

2熵权法

根据信息熵特性,可以用来衡量一个指标的离散程度,指标离散程度越大,该指标对综合评价对影响越大,权重越大。熵权法是一种依赖于数据本身离散性的客观赋值法,用于结合多种指标对样本进行综合打分,实现样本间比较。

3实现步骤假定有n条样本,m个维度,用如下方式表示每个随机变量的取值:

综合评价之熵权法_java_02

step 1 : 标准化处理

为避免量纲造成的影响,首先要对指标进行标准化处理。根据指标含义,可将指标分为正向指标(取值越大越好)和逆向指标(取值越小越好),分别通过如下方法进行标准化:

step 2 : 计算每个维度的熵

其中,

step 3 : 计算冗余度(差异)

step 4 : 计算权重

step 5 : 计算综合评分

4R语言实现
选取有4个变量的2036条数据进行结果测试,输出权重及评分值。


#读入数据data<-read.csv(file.choose(),header=F)
#step1: 标准化处理#逆向指标标准化function1<-function(x){  for(i in 1:length(x)){    x[i]=(max(x)-x[i])/(max(x)-min(x))  }  return(x)}#正向指标标准化function2<-function(x){  for(i in 1:length(x)){    x[i]=(x[i]-min(x))/(max(x)-min(x))  }  return(x)}#假定指标12为逆向指标,指标34为正向指标y1<-apply(data[,c(1,2)],2,function1)y2<-apply(data[,c(3,4)],2,function2)y<-cbind(y1,y2)
#step2:计算每个维度的熵function3<-function(x){  for(i in 1:length(x)){    x[i]=x[i]/sum(x)  }  return(x)}#矩阵pp<-apply(y,2,function3)function4<-function(x){  n<-c(x)  for(i in 1:length(x)){    if(x[i]==0){n[i]=0}    else{n[i]=n[i]*log(n[i])    }    return(n)  }}function5<-function(x){  n<-c(x)  for(i in 1:length(x)){    n[i]=-sum(x)/log(length(x))  }  return(n)}e1<-apply(p,2,function4)e2<-apply(e1,2,function5)e<-e2[1,]
#step3:计算冗余度(差异)d<-1-e
#step4:计算权重w<-d/sum(d)
#step5:计算综合评分s = as.vector( 100*as.matrix(y) %*% w)
根据计算,得到4个维度的权重如下:
综合评价之熵权法_java_03

评分结果示例如下:

综合评价之熵权法_java_04