¿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é?


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


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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.