熵、熵权法与python计算

一、熵

1、定义
在信息论中,熵的公式为
在这里插入图片描述
其中p为每一种可能的情况发生的概率,对数的底数决定了信息上的单位。不同的底对应不同的单位。在信息论里通常以2为底,单位为bit;在热力学中以10为底,单位为Hartley;理论推导过程中通常以e为底,单位为nat。

2、含义
在信息论里,熵并不直接表示信息的多少,而是表示不确定性的大小。如果要消除这种不确定性,熵越大需要输入的信息越多,因此也有说法为熵越大信息越大。

二、熵的计算

熵的计算可以通过numpy和scipy库来计算,也可以使用numpy直接写公式计算,各类计算效率基本一致,包括使用numba也无较大提速,计算时需注意以下2点:
注意1:熵的单位,也就是log的底选择多少,也就是下面代码中的base。
注意2:自己写公式需要注意边界条件,如输入的序列中只有一个数的时候熵为0。如果如下面代码这个通过调用scipy库的entropy函数则无需考虑。
注意3:scipy的entropy函数输入的是一个概率序列,但是函数自带归一化功能,输入非否序列会自动计算每个值的概率,因此输入计数序列即可无需计算每个值出现的概率再输入。

import numpy as np
from scipy.stats import entropy
def entropy1(labels, base=2):
    value,counts = np.unique(labels, return_counts=True)
    return entropy(counts, base=2)

当输入数据是pandas的Series时可以优化为

import pandas as pd
import scipy.stats

def ent(data):
   """data是 `pd.Series`
   """
    p_data = data.value_counts()           
    entropy = scipy.stats.entropy(p_data)  
    return entropy

三、熵权法

熵权法是一种计算权重的方法,计算权重的方法分为主关法和客观法,常见的有8种,参考资料如下。
https://zhuanlan.zhihu.com/p/112667852
https://www.zhihu.com/question/357680646/answer/1748591262
熵权法的原理参考
https://blog.csdn.net/m0_56636447/article/details/122275350
https://zhuanlan.zhihu.com/p/434372508

注意1:在计算时主要需要注意正向指标和负向指标的区分,对于负向指标可以在归一化时改变改变公式计算为正向,也可以数据预处理时提前对指标正向化,如可以把失败率正向化为1-失败率。
注意2:熵权法的熵的计算公式和信息熵的计算公式不同,计算概率时不是每个值出现的次数除以总次数,而是直接用值除以值的求和,即使用某个值的量除以总量。

具体计算方法可以使用mcdm库,这个库即可以计算熵权法也可以计算其他综合指标方法。

https://github.com/akestoridis/mcdm
https://www.cnpython.com/pypi/mcdm

也可以自己写
https://zhuanlan.zhihu.com/p/602908140

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风暴之零

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

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

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

打赏作者

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

抵扣说明:

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

余额充值