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é?
mathematical-statistics
python
entropy
Akavall
fuente
fuente
Respuestas:
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.
fuente
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.klogk k
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 klog21 0 log22 1 1 1 2 1 log2k
En vista de esto, es bastante común escalar la entropía por , de modo que los resultados caen entre y ,0 1logk 0 1
fuente
Pruebe esto (tenga en cuenta la base ):e
Dando:
fuente