一、熵权法介绍
熵最先由申农引入信息论,目前已经在工程技术、社会经济等领域得到了非常广泛的应用。
熵权法的基本思路是根据指标变异性的大小来确定客观权重。
一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起到的作用也越大,其权重也就越大。相反,某个指标的信息熵越大,表明指标值得变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小。
二、熵权法赋权步骤
1. 数据标准化
将各个指标的数据进行标准化处理。
假设给定了k个指标,其中。假设对各指标数据标准化后的值为,那么。
2. 求各指标的信息熵
根据信息论中信息熵的定义,一组数据的信息熵。其中,如果,则定义。
3. 确定各指标权重
根据信息熵的计算公式,计算出各个指标的信息熵为 。通过信息熵计算各指标的权重: 。
#coding=utf-8 import numpy as np li=[[100,90,100,84,90,100,100,100,100], [100,100,78.6,100,90,100,100,100,100], [75,100,85.7,100,90,100,100,100,100], [100,100,78.6,100,90,100,94.4,100,100], [100,90,100,100,100,90,100,100,80], [100,100,100,100,90,100,100,85.7,100], [100 ,100 ,78.6, 100 ,90 , 100, 55.6, 100, 100], [87.5 , 100 ,85.7 , 100 ,100 ,100, 100 ,100 ,100], [100 ,100, 92.9 , 100 ,80 , 100 ,100 ,100 ,100], [100,90 ,100 ,100, 100, 100, 100, 100, 100], [100,100 ,92.9 , 100, 90 , 100, 100 ,100 ,100]] li = np.array(li) #转换为矩阵 li=(li-li.min())/(li.max()-li.min()) #最大最小标准化 m, n = li.shape #m,n为矩阵行和列数 k = 1 / np.log(m) yij = li.sum(axis=0) # axis=0列相加 axis=1行相加 pij = li / yij test = pij * np.log(pij) test = np.nan_to_num(test) #将nan空值转换为0 ej = -k * (test.sum(axis=0)) # 计算每种指标的信息熵 wi = (1 - ej) / np.sum(1 - ej) #计算每种指标的权重