想计算信息熵值,结果 output的是 nan
问题准备:
图为sheet_new dataframe 格式
举例:
若某甲仅在一家药店留有购药记录,其信息熵值为0,因其p=1。
若某甲在不同药店的购药金额为[10,30,60],其信息熵值为
'''-(0.1 * np.log2(0.1) + 0.3 * np.log2(0.3) + 0.6 * np.log2(0.6))''',即1.295461844238322。
思路:
#想计算每一个 Buyer 的信息熵值
#想定义 信息熵值
def infor(sheet_new):
a = sheet_new.values / 100
return sum(np.log2(a) * a * (-1))
#尝试计算BID0001 的信息熵值
print(infor(sheet_new.BID0001))
#输出结果为 nan 并有警告 但没报错
可能我的思路有误
希望大家帮忙解答
谢谢!
所谓信息熵描述了信息源各可能事件发生的不确定性。试想若某人仅在一家药店购药,则他的行为是确定的;而若在多家药店购药,则存在一定的不确定性,需要通过博主上面给出的公式计算。以上就是对这道题的理解。
解题思路:
首先,判断每一个buyer(BID00i)是否在一家药店购药,也就是是判断每一列的非零值是否不唯一;
第二,若buyer仅在一家药店购药,则范围信息熵值为0;
第三,若buyer在多家药店购药,则按上述公式计算。给一个简单的编程思路:首先循环遍历每列,把非零值找出来,代入np.log2(a) * a * (-1)计算,然后将本列所有计算好的值求sum,即为该列对应的buyer的信息熵值。