为什么我得到的信息熵大于1?


11

我实现了以下函数来计算熵:

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

1
否:香农熵是非负的。
Alexis 2014年

2
如果我有两个以上的事件,那么熵大于1似乎没有什么问题,并且只有在特殊情况下,即我的事件是二进制的(我有两个事件),熵的值才介于0和1之间。
Akavall

Answers:


17

概率一样的。

熵衡量随机变量的“信息”或“不确定性”。使用基数2时,以位为单位;并且一个变量中可以包含多个信息。

在此示例中,一个样本“包含”约1.15位的信息。换句话说,如果您能够完美地压缩一系列样本,则每个样本平均需要那么多比特。


谢谢。我想我明白了,但我想确定。我下面的说法对吗?如果我只有两个结果,那么我可以获得的大多数信息是1位,但是如果我有2个以上的结果,那么我可以获得的1个以上信息。
2014年

是。(例如,考虑四个均匀分布的结果,可以通过每个样本两次抛硬币来产生。)
CL。

除此之外,对于二进制分类问题,熵的范围为0-1,对数为2的熵为0,其中k是您拥有的类的数量。
MichaelMMeskhi

13

熵的最大值是 logk,在哪里 k是您使用的类别数。它的数值自然取决于您使用的对数的底数。

以2为底的对数为例,如下所示: log210log221,因此结果大于 1 如果类别数是 1 要么 2。大于1 如果超过则将是错误的 log2k

鉴于此,通过 logk,因此结果的确介于 01


不知道这一点,谢谢。因此,对数的底数基本上与样本的长度相同,而不是更多吗?
Fierce82 '18年

2
样品的长度也不重要。这是您有多少个类别。
尼克·考克斯

只是为了澄清一下,它是可能的类别数,还是您计算熵的类别数?例如。我有10个可能的类别,但是在我要为其计算熵的系统中,有3个样本代表2个类别。在这种情况下k是2吗?
eljusticiero67

在实践中不出现的类别观测到的概率为零,并且不会影响熵的结果。这是一个很强的约定,可以更严格地证明,0log0取为零(此处的对数底数无关紧要)。
尼克·考克斯

-2

试试这个(注意基础 e):

from math import log

def calc_entropy(probs):
    my_sum = 0
    for p in probs:
        if p > 0:
            my_sum += p * log(p)

    return - my_sum

给予:

>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
0.796311640173813

我知道我可以做到这一点,但是我的印象是,使用对数基数2还应该产生0到1之间的熵值。仅当我有两个概率时,才可以使用对数基数2吗?
Akavall 2014年

使用 log2 测量表征一系列不确定性所需的位数 p值。参见xkcd.com/936en.wikipedia.org/wiki/Entropy_%28information_theory%29
Alexis

这个答案表明,以nat表示的熵不应超过 1,但我怀疑那是您打算传达的信息,因为它不是真的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.