J'ai implémenté la fonction suivante pour calculer l'entropie:
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
Résultat:
>>> 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
Ma compréhension était que l'entropie est comprise entre 0 et 1, 0 signifiant très certain et 1 signifiant très incertain. Pourquoi ai-je une mesure d'entropie supérieure à 1?
Je sais que si j'augmente la taille de la base logarithmique, la mesure d'entropie sera plus petite, mais je pensais que la base 2 était standard, donc je ne pense pas que ce soit le problème.
Je dois manquer quelque chose d'évident, mais quoi?
Réponses:
L'entropie n'est pas la même chose que la probabilité .
L'entropie mesure «l'information» ou «l'incertitude» d'une variable aléatoire. Lorsque vous utilisez la base 2, elle est mesurée en bits; et il peut y avoir plus d'un bit d'information dans une variable.
Dans cet exemple, un échantillon "contient" environ 1,15 bits d'informations. En d'autres termes, si vous pouviez compresser parfaitement une série d'échantillons, vous auriez besoin de ce nombre de bits par échantillon, en moyenne.
la source
La valeur maximale d'entropie est , où k est le nombre de catégories que vous utilisez. Sa valeur numérique dépendra naturellement de la base des logarithmes que vous utilisez.Journalk k
En utilisant les logarithmes de base 2 comme exemple, comme dans la question: est 0 et log 2 2 est 1 , donc un résultat supérieur à 1 est définitivement faux si le nombre de catégories est 1 ou 2 . Une valeur supérieure à 1 sera erronée si elle dépasse log 2 k .Journal21 0 Journal22 1 1 1 2 1 Journal2k
la source
Donnant:
la source