¿Por qué obtengo una entropía de información mayor que 1?

11

Implementé la siguiente función para calcular la entropía:

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

Comprendí que la entropía está entre 0 y 1, 0 significa muy seguro y 1 significa muy incierto. ¿Por qué obtengo una medida de entropía mayor que 1?

Sé que si aumento el tamaño de la base de registro, la medida de entropía será menor, pero pensé que la base 2 era estándar, por lo que no creo que ese sea el problema.

Debo estar perdiendo algo obvio, pero ¿qué?

Akavall
fuente
¿La base no depende del tipo de entropía? ¿No es la entropía de la base 2 Shannon y la entropía de la mecánica estadística de registro natural?
Alexis
@Alexis, pero ¿no varía la entropía de Shannons entre 0 y 1?
Akavall
1
No: la entropía de Shannon no es negativa.
Alexis
2
Parece que no hay nada de malo en que la entropía sea mayor que 1 si tengo más de dos eventos, y el valor de la entropía está entre 0 y 1 solo en casos especiales, donde mis eventos son binarios (tengo dos eventos).
Akavall

Respuestas:

17

Entropía no es lo mismo que probabilidad .

La entropía mide la "información" o "incertidumbre" de una variable aleatoria. Cuando usa la base 2, se mide en bits; y puede haber más de un bit de información en una variable.

En este ejemplo, una muestra "contiene" aproximadamente 1,15 bits de información. En otras palabras, si pudieras comprimir una serie de muestras perfectamente, necesitarías esa cantidad de bits por muestra, en promedio.

CL.
fuente
Gracias. Creo que lo entiendo, pero quiero asegurarme. Yo la siguiente declaración ¿verdad? Si solo tengo dos resultados, entonces la mayoría de la información que puedo obtener es de 1 bit, pero si tengo más de 2 resultados, puedo obtener más de 1 bit de información.
Akavall
Si. (Por ejemplo, considere cuatro resultados distribuidos uniformemente, que podrían generarse mediante dos lanzamientos de monedas justos por muestra).
CL.
Para agregar a esto, la entropía varía de 0-1 para problemas de clasificación binaria y 0 para registrar la base 2 k, donde k es el número de clases que tiene.
MichaelMMeskhi
13

El valor máximo de entropía es , donde es el número de categorías que está utilizando. Su valor numérico dependerá naturalmente de la base de los logaritmos que esté utilizando.klogkk

Usando logaritmos de base 2 como ejemplo, como en la pregunta: es y es , por lo que un resultado mayor que es definitivamente incorrecto si el número de categorías es o . Un valor mayor que será incorrecto si excede .0 log 2 2 1 1 1 2 1 log 2 klog210log2211121log2k

En vista de esto, es bastante común escalar la entropía por , de modo que los resultados caen entre y ,0 1logk01

Nick Cox
fuente
No sabía sobre eso, gracias. Entonces, ¿básicamente la base del logaritmo debe ser la misma que la longitud de la muestra, y no más?
Fierce82
2
La longitud de la muestra también es irrelevante. Es cuántas categorías tienes.
Nick Cox
solo para aclarar, ¿es k el número de categorías posibles o el número de categorías para las que está calculando la entropía? p.ej. Tengo 10 categorías posibles, pero hay 3 muestras que representan 2 categorías en el sistema para el que estoy calculando la entropía. es k en este caso 2?
eljusticiero67
Las categorías que no aparecen en la práctica han observado probabilidad cero y no afectan el resultado de la entropía. Es una convención fuerte, que puede justificarse de manera más rigurosa, que debe tomarse como cero (la base de los logaritmos es irrelevante aquí). 0log0
Nick Cox
-2

Pruebe esto (tenga en cuenta la 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
fuente
Sé que puedo hacer eso, pero tenía la impresión de que el uso de la base de registro 2 también debería producir un valor de entropía entre 0 y 1. ¿Se puede usar la base de registro 2 solo cuando tengo dos probabilidades?
Akavall
El uso de mide el número de bits necesarios para caracterizar la incertidumbre de la serie de valores . Ver xkcd.com/936 y en.wikipedia.org/wiki/Entropy_%28information_theory%29 plog2p
Alexis
Esta respuesta sugeriría que la entropía expresada en nats no debe exceder , pero dudo que esa sea la información que pretendía transmitir, porque simplemente no es cierto. 1
whuber