1信息熵
信息熵是不确定性的一个度量,反映信息量的多少。信息量多少与随机事件发生概率有关,概率越大,不确定性越小,包含信息就越少,所以随机事件的信息量随着其发生概率递减。信息熵计算公式如下:
其中,xi为随机变量X的取值,p为随机事件xi发生的概率。
2熵权法
根据信息熵特性,可以用来衡量一个指标的离散程度,指标离散程度越大,该指标对综合评价对影响越大,权重越大。熵权法是一种依赖于数据本身离散性的客观赋值法,用于结合多种指标对样本进行综合打分,实现样本间比较。
3实现步骤假定有n条样本,m个维度,用如下方式表示每个随机变量的取值:
step 1 : 标准化处理
为避免量纲造成的影响,首先要对指标进行标准化处理。根据指标含义,可将指标分为正向指标(取值越大越好)和逆向指标(取值越小越好),分别通过如下方法进行标准化:
step 2 : 计算每个维度的熵
其中,
step 3 : 计算冗余度(差异)
step 4 : 计算权重
step 5 : 计算综合评分
4R语言实现
选取有4个变量的2036条数据进行结果测试,输出权重及评分值。
根据计算,得到4个维度的权重如下:#读入数据
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)
}
#假定指标1,2为逆向指标,指标3,4为正向指标
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)
}
#矩阵p
p<-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)
评分结果示例如下: