Python熵权法确定权重
声明:本文只是个人按照原理对熵权法的实现,结果与手动计算的结果一样。如果有疑问,请多参考一些其他的资料。
熵权法赋权是一种客观赋权方法, 在一些评价中, 通过对熵的计算确定权重, 就是根据各项评价指标值的差异程度, 确定各评价指标的权重。详细介绍及计算公式可参考文献[1]。
主要步骤包括(1)原始数据矩阵进行标准化(2)定义熵(3)定义熵权。具体步骤也可参考https://blog.csdn.net/wangh0802/article/details/53981356。这里不再赘述。这里通过Python实现计算步骤。
借用上面博客中的数据,下表是对各个科室指标考核后的评分结果。Xi为指标,ABCD..K为科室。
科室 | X1 | X2 | X3 | X4 | X5 | X6 | X7 | X8 | X9 |
---|---|---|---|---|---|---|---|---|---|
A | 100 | 90 | 100 | 84 | 90 | 100 | 100 | 100 | 100 |
B | 100 | 100 | 78.6 | 100 | 90 | 100 | 100 | 100 | 100 |
C | 75 | 100 | 85.7 | 100 | 90 | 100 | 100 | 100 | 100 |
D | 100 | 100 | 78.6 | 100 | 90 | 100 | 94.4 | 100 | 100 |
E | 100 | 90 | 100 | 100 | 100 | 90 | 100 | 100 | 80 |
F | 100 | 100 | 100 | 100 | 90 | 100 | 100 | 85.7 | 100 |
G | 100 | 100 | 78.6 | 100 | 90 | 100 | 55.6 | 100 | 100 |
H | 87.5 | 100 | 85.7 | 100 | 100 | 100 | 100 | 100 | 100 |
I | 100 | 100 | 92.9 | 100 | 80 | 100 | 100 | 100 | 100 |
J | 100 | 90 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
K | 100 | 100 | 92.9 | 100 | 90 | 100 | 100 | 100 | 100 |
将上述数据保存到Excel表格中,并用xlrd读取。
Python程序如下
import numpy as np
import xlrd#读数据并求熵
path=u'K:\\选指标的.xlsx'
hn,nc=1,1
#hn为表头行数,nc为表头列数
sheetname=u'Sheet3'
def readexcel(hn,nc):data = xlrd.open_workbook(path)table = data.sheet_by_name(sheetname)nrows = table.nrowsdata=[]for i in range(hn,nrows):data.append(table.row_values(i)[nc:])return np.array(data)
def entropy(data0):#返回每个样本的指数#样本数,指标个数n,m=np.shape(data0)#一行一个样本,一列一个指标#下面是归一化maxium=np.max(data0,axis=0)minium=np.min(data0,axis=0)data= (data0-minium)*1.0/(maxium-minium)##计算第j项指标,第i个样本占该指标的比重sumzb=np.sum(data,axis=0)data=data/sumzb#对ln0处理a=data*1.0a[np.where(data==0)]=0.0001
# #计算每个指标的熵e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0)
# #计算权重w=(1-e)/np.sum(1-e)recodes=np.sum(data0*w,axis=1)return recodes
data=readexcel(hn,nc)
grades=entropy(data)
计算的结果为:
In[32]:grades
Out[32]:
array([95.7069621 , 93.14062354, 93.17273781, 92.77037549, 95.84064938,98.01005572, 90.20508545, 95.17203466, 95.96929203, 97.80841298,97.021269 ])
上面的程序计算得分时用了标准化前的值×权重,这对于原始评分量纲相同时没有什么问题。
按照论文上的公式,计算得分时应该用标准化后的值×权重,这对于原始数据量纲不同时应该这样做,因此按照论文的公式计算的程序如下:
import numpy as np
import xlrd#读数据并求熵
path=u'K:\\选指标的.xlsx'
hn,nc=1,1
#hn为表头行数,nc为表头列数
sheetname=u'Sheet3'
def readexcel(hn,nc):data = xlrd.open_workbook(path)table = data.sheet_by_name(sheetname)nrows = table.nrowsdata=[]for i in range(hn,nrows):data.append(table.row_values(i)[nc:])return np.array(data)
def entropy(data0):#返回每个样本的指数#样本数,指标个数n,m=np.shape(data0)#一行一个样本,一列一个指标#下面是归一化maxium=np.max(data0,axis=0)minium=np.min(data0,axis=0)data= (data0-minium)*1.0/(maxium-minium)##计算第j项指标,第i个样本占该指标的比重sumzb=np.sum(data,axis=0)data=data/sumzb#对ln0处理a=data*1.0a[np.where(data==0)]=0.0001
# #计算每个指标的熵e=(-1.0/np.log(n))*np.sum(data*np.log(a),axis=0)
# #计算权重w=(1-e)/np.sum(1-e)recodes=np.sum(data*w,axis=1)return recodes
data=readexcel(hn,nc)
grades=entropy(data)
结果如下:
In[34]:grades
Out[34]:
array([0.08767219, 0.07639727, 0.08342572, 0.07555273, 0.08920511,0.11506703, 0.06970125, 0.09550656, 0.09852824, 0.10232353,0.10662037])
完。
参考文献:
[1] 倪九派, 李萍, 魏朝富,等. 基于AHP和熵权法赋权的区域土地开发整理潜力评价[J]. 农业工程学报, 2009, 25(5):202-209.
Python熵权法确定权重相关推荐
- 多目标决策问题1.1.1:线性加权法——熵权法确定权重
多目标决策问题是目前数学建模中比较普遍的一类问题, 此类问题要求我们满足多个目标函数最优与决策变量的线性约束条件或非线性约束条件下进行求解, 多目标决策问题主要有主要目标法.线性加权法.分层序列法.步 ...
- R 熵权法计算权重及综合得分
最近工作中需要根据大数据智能计算,预测或者推荐出供应链付款优先/权重来,以往都是人工根据供应商关系等因素做付款的一个优先级,并不能客观的将付款策略分发到其他供应商,现根据大数据客观计算,记录一下 1, ...
- 利用熵权法确定指标权重
利用熵权法确定指标权重 1. 熵权法的基本原理 熵权法的基本思路是根据指标变异性的大小来确定客观权重. 一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起 ...
- 《零基础数学建模》——TOPSIS+熵权法
目录 前言 一.TOPSIS法(优劣解距离法) 1.模型原理 2.建模步骤 二.模型实现 第一步:将原始矩阵正向化 第二步:正向化矩阵标准化 第三步:计算得分并归一化 四.TOPSIS模型的总结与 ...
- 基于熵权法对Topsis模型的修正
基于熵权法对Topsis模型的修正 有n个要评价的对象,m个评价指标的标准化矩阵,可以使用层次分析法给这m个评价指标确定权重 ∑j=1mωj=1\sum_{j=1}^m{\omega_j}=1 j=1 ...
- 数学建模笔记 Topsis和熵权法
Topsis法(Technique for Order Preference by Similarity to Ideal Solution)可翻译为逼近理想解排序法,国内常简称为优劣解距离法. ...
- TOPSIS算法与熵权法
TOPSIS算法 英文全称Technique for Order Preference by Similarity to Ideal Solution,翻译为逼近理想解排序法.使用层次分析法进行评价时 ...
- 【指标体系构建】标准化处理+熵权法
面对构建好的指标体系,如何进行进一步量化操作 1.标准化处理 引用链接:百度安全验证https://baijiahao.baidu.com/s?id=1717456781716191819&w ...
- Python小案例(六)通过熵权法计算指标权重
Python小案例(六)通过熵权法计算指标权重 在日常业务中,产品运营需要综合多个指标进行判断,如果没有目标变量进行监督训练的话,很难人为地判断哪个指标更好,综合起来哪个类别更优秀. 这里介绍一种基于 ...
- 帮我用python写一个程序 输入三个列表数据 使用熵权法计算这三组数据的权重并输出...
好的,以下是用Python实现熵权法计算三组数据权重的代码: import numpy as np# 定义熵权法函数 def entropy_weight(x):x = np.array(x)# 计算 ...
最新文章
- 配置访问oracle_SpringBoot中application.properties的常用配置
- php long2ip,php ip2long和long2ip函数实现
- SPI分配传感器的寄存器
- JavaFX中的塔防(3)
- 结构化日志:出错时你最想要的好朋友
- mysql 修改数据库的数据库_如何更改MySQL数据库的数据库名
- spring4.x(13)---SpringEL-操作List、Map
- MTK 驱动(85)----RPMB key introduction
- 无人驾驶、免费乘坐,硅谷的出租车行业要变天了
- linux 美化 深度,不美翻怎么开发!Ubuntu 16.04 LTS深度美化!(2017年度定稿版)
- 声笔飞码6.00版使用指南
- ros系统能用c语言编程,ROS操作系统学习(十一)参数的使用与编程方法
- 跨页面的多选功能实现
- matlab距离平方和公式推导,lstopt 非线性拟合:相关系数之平方(R^2)和决定系数(DC)计算公式是?...
- 作者承认抄袭!导师道歉!香港科技大学展开调查
- 计算机视觉论文-2021-07-29
- Couldn‘t terminate the existing process for xxx
- 计算机网络复习记录 (2)Chap 4
- 狂补呼叫中心相关知识,将收集的资料贴于此
- rust沙河游戏_逆水寒死不了!网易新年放大招,沙盒生存玩法的网游版rust?