Por que estou obtendo entropia de informações maior que 1?

11

Eu implementei a seguinte função para calcular a entropia:

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

Resultado:

>>> 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

Meu entendimento era que a entropia está entre 0 e 1, 0 significa muito certo e 1 significa muito incerto. Por que obtenho uma medida de entropia maior que 1?

Sei que se aumentar o tamanho da base de log, a medida de entropia será menor, mas pensei que a base 2 fosse padrão, então não acho que esse seja o problema.

Eu devo estar perdendo algo óbvio, mas o que?

Akavall
fonte
A base não depende do tipo de entropia? A entropia de Shannon da base 2 não e a entropia da mecânica estatística do log natural?
Alexis28
@ Alexis, mas a entropia de Shannons não varia entre 0 e 1?
precisa saber é o seguinte
11
Não: a entropia de Shannon não é negativa.
Alexis
2
Parece que não há nada errado com a entropia ser maior que 1 se eu tiver mais de dois eventos, e o valor da entropia estiver entre 0 e 1 apenas em casos especiais, onde meus eventos são binários (eu tenho dois eventos).
Akavall

Respostas:

17

Entropia não é o mesmo que probabilidade .

A entropia mede a "informação" ou "incerteza" de uma variável aleatória. Quando você está usando a base 2, ela é medida em bits; e pode haver mais de um bit de informação em uma variável.

Neste exemplo, um exemplo "contém" cerca de 1,15 bits de informação. Em outras palavras, se você pudesse compactar perfeitamente uma série de amostras, precisaria em média de muitos bits por amostra.

CL.
fonte
Obrigado. Acho que entendi, mas quero ter certeza. Eu a seguinte declaração, certo? Se eu tiver apenas dois resultados, a maioria das informações que posso obter é de 1 bit, mas se tiver mais de 2 resultados, posso obter mais de 1 bit de informação.
Akavall 5/05
Sim. (Por exemplo, considere quatro resultados uniformemente distribuídos, que podem ser gerados por dois lançamentos justos de moedas por amostra.)
CL.
Para adicionar isso, a entropia varia de 0 a 1 para problemas de classificação binária e 0 a registrar a base 2 k, onde k é o número de classes que você possui.
MichaelMMeskhi
13

O valor máximo da entropia é , em que é o número de categorias que você está usando. Seu valor numérico dependerá naturalmente da base de logaritmos que você está usando.klogkk

Usando logaritmos de base 2 como exemplo, como na pergunta: é e é , portanto, um resultado maior que é definitivamente errado se o número de categorias for ou . Um valor maior que estará errado se exceder .0 log 2 2 1 1 1 2 1 log 2 klog210log2211121log2k

Em vista disso, é bastante comum escalar entropia por , para que os resultados caiam entre e ,0 1logk01

Nick Cox
fonte
não sabia disso, obrigado. Então, basicamente, a base do logaritmo deve ser igual ao comprimento da amostra, e não mais?
Fierce82
2
O comprimento da amostra também é irrelevante. É quantas categorias você tem.
22418 Nick Cox
apenas para esclarecer, é k o número de categorias possíveis ou o número de categorias para as quais você está calculando a entropia? por exemplo. Eu tenho 10 categorias possíveis, mas existem 3 amostras representando 2 categorias no sistema para o qual estou calculando a entropia. é k neste caso 2?
precisa saber é o seguinte
Categorias que não ocorrem na prática observaram probabilidade zero e não afetam o resultado da entropia. É uma convenção forte, que pode ser justificada com mais rigor, que deve ser tomado como zero (a base de logaritmos é imaterial aqui). 0log0
Nick Cox
-2

Tente isto (observe a base ):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

Dando:

>>> calc_entropy([1/7.0, 1/7.0, 5/7.0])
0.796311640173813
Alexis
fonte
Sei que posso fazer isso, mas fiquei com a impressão de que o uso da base de log 2 também deveria gerar um valor de entropia entre 0 e 1. A base de log 2 pode ser usada apenas quando tenho duas probabilidades?
precisa saber é o seguinte
O uso de mede o número de bits necessários para caracterizar a incerteza da série de valores- . Veja xkcd.com/936 e en.wikipedia.org/wiki/Entropy_%28information_theory%29 plog2p
Alexis
Essa resposta sugere que a entropia expressa em nats não deve exceder , mas duvido que essa seja a informação que você pretendia transmitir, porque simplesmente não é verdadeira. 1
whuber