当前位置: 首页 > news >正文

【赋权算法】Python实现熵权法

在开始之前,我们先说一下信息熵的概念。

当一件事情发生,如果是意料之中,那么这个事情就并不能拿来当做茶余饭后的谈资,我们可以说这个事情并没有什么信息和价值。而当一件不可能发生的事情发生的时候,我们可能就会觉得震撼三观,这件事情太Crazy了,带来的信息量也就很多。

哼哼,通过上文我们可以知道,一个事情越稳定,信息量就越少,那么如何去衡量呢?我们可以用概率的倒数(也就是负相关)来衡量。
I = − l o g ( p ( x ) ) I=-log(p(x)) I=log(p(x))
I I I也就是自信息,一件事情越确定,自信息也就越小。

而信息熵就是自信息的期望,代表这一件事情的混乱程度。信息熵越大,混乱程度越大,说明这件事情越疯狂。
H = − l o g ( p ( x ) ) p ( x ) H=-log(p(x))p(x) H=log(p(x))p(x)


再说熵权法(Entropy Weight Method),熵权法是客观赋权的一种方式,对应的主观赋权有专家打分法,相似的还有层次分析法。熵权法是利用信息稳定程度而提出的方法,一般来说,某列属性越稳定,它的信息就越可信,那么在实际的权重也应当越高。

不说人话,那就是:

一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起到的作用也越大,其权重也就越大。相反,某个指标的信息熵越大,表明指标值得变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小。

你会发现在这段话中,自信息和提供信息实际上是成反比的。

不管他,只需要知道原本越稳定的数据,对异常越敏感,也越可信。

在实际计算中,遵循以下步骤:

step1 归一化

正向指标
Y i j = X i j − m i n ( X i ) m a x ( X i ) − m i n ( X i ) Y_{ij}=\frac{X_{ij}-min(X_i)}{max(X_i)-min(X_i)} Yij=max(Xi)min(Xi)Xijmin(Xi)
负向指标
Y i j = m a x ( X i ) − X i j m a x ( X i ) − m i n ( X i ) Y_{ij}=\frac{max(X_i)-X_{ij}}{max(X_i)-min(X_i)} Yij=max(Xi)min(Xi)max(Xi)Xij
step2 求频率替换概率
p i j = Y i j ∑ Y i j p_{ij}=\frac{Y_{ij}}{\sum Y_{ij}} pij=YijYij
step3 计算归一化信息熵
E n t r o p y = − 1 l n ( n ) ∑ p i j l n ( p i j ) Entropy=-\frac{1}{ln(n)}\sum p_{ij}ln(p_{ij}) Entropy=ln(n)1pijln(pij)
以什么为底的不重要啦

step4 计算权重
W j = 1 − E j k − ∑ E j W_j=\frac{1-E_j}{k-\sum E_j} Wj=kEj1Ej


以下是实现代码:

def EWM(data):t=(data-data.min(axis=0))/(data.max(axis=0)-data.min(axis=0))t=t/t.sum(axis=0)t[t<0.0001]=0.0001entropy=-1/np.log(t.shape[0])*np.sum(t*np.log(t))return [(1-i)/(len(entropy)-sum(entropy)) for i in entropy]

当然,这样的结果只是个权重,我们还需要对数据做乘法:

np.matmul(data.values,np.array(EWM(data)).T)

在这里插入图片描述

对这样一组数据,A十分稳定,B是正态分布,C是二分布,得到的结果是:

信息熵:

在这里插入图片描述

权重:

在这里插入图片描述


确实符合越稳定权重越大。

熵权法的优点

熵值法是根据各项指标指标值的变异程度来确定指标权数的,这是一种客观赋权法,避免了人为因素带来的偏差。

相对那些主观赋值法,精度较高客观性更强,能够更好的解释所得到的结果。

熵权法的缺点

忽略了指标本身重要程度,有时确定的指标权数会与预期的结果相差甚远,同时熵值法不能减少评价指标的维数,也就是熵权法符合数学规律具有严格的数学意义,但往往会忽视决策者主观的意图;

如果指标值的变动很小或者很突然地变大变小,熵权法用起来有局限

http://www.lryc.cn/news/146339.html

相关文章:

  • docker之 Consul(注册与发现)
  • 用NeRFMeshing精确提取NeRF网络中的3D网格
  • 权限提升-Windows本地提权-AT+SC+PS命令-进程迁移-令牌窃取-getsystem+UAC
  • 深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)
  • Oracle的学习心得和知识总结(二十九)|Oracle数据库数据库回放功能之论文三翻译及学习
  • 新版100句学完7000雅思单词
  • MATLAB图论合集(三)Dijkstra算法计算最短路径
  • MySQL 8.0.xx 版本解决group by分组的问题
  • 设计模式—原型模式(Prototype)
  • 【pytorch】Unfold和Fold的互逆操作
  • 【AI】《动手学-深度学习-PyTorch版》笔记(二十一):目标检测
  • 畅捷通T+用户中locked勒索病毒后该怎么办?勒索病毒解密数据恢复
  • 神仙般的css动画参考网址,使用animate.css
  • 江西抚州新能源汽车3d扫描零部件逆向抄数测量改装-CASAIM中科广电
  • 数据结构学习 --4 串
  • 探索Kotlin K2编译器和Java编译器的功能和能力
  • 如何安装chromadb
  • vue实现把字符串中的所有@内容,替换成带标签的
  • 「MySQL-00」MySQL在Linux上的安装、登录与删除
  • 8月29-31日上课内容 第五章
  • 数据库导出工具
  • ChatGPT 制作可视化柱形图突出显示第1名与最后1名
  • 前端学习记录~2023.8.10~JavaScript重难点实例精讲~第6章 Ajax
  • 2023年Java核心技术第九篇(篇篇万字精讲)
  • C#上位机中的单例应用思考
  • Python分享之redis
  • Linux常用命令——dd命令
  • DETR-《End-to-End Object Detection with Transformers》论文精读笔记
  • 网络流量监控-sniffnet
  • 验证go循环删除slice,map的操作和map delete操作不会释放底层内存的问题