3 评价类算法:熵权法笔记(附Python代码)

一、原理

1.引例

从下图可以看到,越可能发生的事情信息量越少。而我们使用概率来衡量事情发生的可能性。
在这里插入图片描述

2.定义

熵权法是一种可以用于多对象、多指标的综合评价方法,其评价结果主要依据客观资料,几乎不受主观因素的影响,可以在很大程度上避免人为因素的干扰。熵值计算公式如下:
在这里插入图片描述

二、步骤

1.什么是度量信息量的大小

信息量与概率的函数图与ln(x)函数图类似,因此在衡量信息量时,我们选用的是ln(x)函数。
在这里插入图片描述

2.正向化和归一化矩阵

矩阵需要归一化。
如果矩阵中还存在负数,则需要正向化。比如说用值减去指标的最小值,再除以指标最大值和最小值的差。以保证所有的权重都是正数。

3.计算熵值

计算熵值的具体公式如下:(这里的 e 是熵值)
在这里插入图片描述
n 是参与评价个体的个数。
p 为第 i 个指标下的概率,计算:用相应值除以一列中数值的和。比如第一列第一个数据概率的计算方法为(第一列第一个数)/(这一列的和)。

4.构建熵权

信息的效用值公式为:1-e,再对权重进行归一化即可得到权重 ω 。(公式提到的 ω 是熵权)
在这里插入图片描述
熵权并非实际意义上的重要性系数而是各指标在竞争意义上的相对激烈程度系数。熵权满足条件:
在这里插入图片描述
指标的熵值越大,熵权越小,该指标越不重要。

5.结合主观赋权法计算

这里实际是要求在比赛过程中,将例如层次分析法,TOPSIS法等方法一起结合,增加分析的可靠性。
推荐阅读文章

三、代码

import numpy as np

'''1.输入数据'''
print("请输入参评数目:")
n = eval(input())
print("请输入指标数目:")
m = eval(input())
print("请输入矩阵:")
X = np.zeros(shape=(n, m))
for i in range(n):
    X[i] = input().split(" ")
    X[i] = list(map(float, X[i]))
print("输入矩阵为:\n{}".format(X))

'''2.归一化处理'''
X = X.astype('float')
for j in range(m):
    X[:, j] = X[:, j]/sum(X[:, j])
print("归一化矩阵为:\n{}".format(X))

'''3.计算概率矩阵p'''
p = X
for j in range(m):
    p[:, j] = X[:, j]/sum(X[:, j])

'''4.计算熵值'''
E = np.array(X[0, :])
for j in range(m):
    E[j] = -1/np.log(n)*sum(p[:, j]*np.log(p[:, j]+ 1e-5))
print("熵值矩阵为:\n{}".format(E))

'''5.计算熵权'''
w = (1-E)/sum(1-E)
print("熵权矩阵为:\n{}".format(w))

'''6.加权后的数据'''
R = X*w
print("加权后数据矩阵为:\n{}".format(R))

四、参考链接

2.视频资源来源B站
2.视频资源来源B站–清风

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz_Lambda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值