我实现了以下函数来计算熵:
from math import log
def calc_entropy(probs):
my_sum = 0
for p in probs:
if p > 0:
my_sum += p * log(p, 2)
return - my_sum
结果:
>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
1.1488348542809168
>>> from scipy.stats import entropy # using a built-in package
# give the same answer
>>> entropy([1/7.0, 1/7.0, 5/7.0], base=2)
1.1488348542809166
我的理解是熵在0到1之间,0表示非常确定,而1表示非常不确定。为什么我得到的熵测量值大于1?
我知道,如果我增加对数基数的大小,则熵测度会较小,但是我认为基数2是标准的,所以我不认为这是问题所在。
我一定缺少明显的东西,但是呢?
基数不取决于熵的种类吗?基于2的Shannon熵和自然对数统计力学熵不是吗?
—
亚历克西斯
@Alexis,但香农斯的熵值不在0到1之间吗?
—
Akavall
否:香农熵是非负的。
—
Alexis 2014年
如果我有两个以上的事件,那么熵大于1似乎没有什么问题,并且只有在特殊情况下,即我的事件是二进制的(我有两个事件),熵的值才介于0和1之间。
—
Akavall