熵值法(Entropy Method)是一种多属性决策分析方法,主要用于权重确定、排序和评价。它在风险评估、资源配置、环境管理等领域得到广泛应用。熵值法的核心思想是基于信息熵的概念,利用信息熵来度量各属性对决策的贡献程度,从而确定各属性的权重。
下面是熵值法的基本步骤:
- 构建决策矩阵: 将决策问题转化为一个属性-样本矩阵,其中每一列表示一个属性,每一行表示一个样本。
- 归一化处理: 对决策矩阵进行归一化处理,使得每个属性的值都在 [0, 1] 范围内。这可以通过将每个属性值除以该属性的最大值来实现。
- 计算熵值: 对每个属性计算其信息熵,熵的计算公式为:
import numpy as np
import pandas as pd
##读取数据
data=pd.read_csv('data.csv',encoding='gb18030',index_col=0)
indicator=data.columns.tolist() ##指标个数
project=data.index.tolist() ##方案数、评价主体
value=data.values
print(indicator)
print(project)
print(value)
data.head()
###定义数据标准化函数。为了避免求熵值时对数无意义,对数据进行平移,对标准化后的数据统一加了常数0.001
def std_data(value,flag):
for i in range(len(indicator)):
#print(flag[i])
if flag[i]=='+':
value[:,i]=(value[:,i]-np.min(value[:,i],axis=0))/(np.max(value[:,i],axis=0)-np.min(value[:,i],axis=0))+0.001
elif flag[i]=='-':
value[:,i]=(np.max(value[:,i],axis=0)-value[:,i])/(np.max(value[:,i],axis=0)-np.min(value[:,i],axis=0))+0.001
return value
#定义熵值法函数、熵值法计算变量的权重
def cal_weight(indicator,project,value):
p= np.array([[0.0 for i in range(len(indicator))] for i in range(len(project))])
##print(p)
for i in range(len(indicator)):
p[:,i]=value[:,i]/np.sum(value[:,i],axis=0)
e=-1/np.log(len(project))*sum(p*np.log(p)) #计算熵值
g=1-e # 计算一致性程度
w=g/sum(g) #计算权重
return w
##数据标准化
flag=["-","+","-","+","+","+"] ##表示指标为正向指标还是反向指标
std_value=std_data(value,flag)
std_value.round(3)
##结果
w=cal_weight(indicator,project,std_value)
w=pd.DataFrame(w,index=data.columns,columns=['权重'])
print("#######权重:#######")
print(w)
score=np.dot(std_value,w).round(2)
#print(score)
score=pd.DataFrame(score,index=data.index,columns=['综合得分']).sort_values(by =['综合得分'],ascending = False)
score