Qu'est-ce que «l'entropie et le gain d'informations»?

338

Je lis ce livre ( NLTK ) et c'est déroutant. L'entropie est définie comme :

L'entropie est la somme de la probabilité de chaque étiquette multipliée par la probabilité logarithmique de cette même étiquette

Comment puis-je appliquer l' entropie et l'entropie maximale en termes d'exploration de texte? Quelqu'un peut-il me donner un exemple facile et simple (visuel)?

TIMEX
la source
1
Une solution agréable et intuitive math.stackexchange.com/questions/331103/…
Ravi G
belle et réponse intuitive pour thsi question math.stackexchange.com/questions/331103/...
Ravi G
une vidéo pour une explication bonne et simple
Grijesh Chauhan

Réponses:

1049

Je suppose que l'entropie a été mentionnée dans le contexte de la construction d' arbres de décision .

Pour illustrer, imaginez la tâche d' apprendre à classer les prénoms en groupes hommes / femmes. On lui donne une liste de noms étiquetés chacun avec mou f, nous voulons apprendre un modèle qui correspond aux données et peut être utilisé pour prédire le sexe d'un nouveau prénom invisible.

name       gender
-----------------        Now we want to predict 
Ashley        f              the gender of "Amro" (my name)
Brian         m
Caroline      f
David         m

La première étape consiste à décider quelles caractéristiques des données sont pertinentes pour la classe cible que nous voulons prédire. Quelques exemples de fonctionnalités: première / dernière lettre, longueur, nombre de voyelles, se termine-t-il par une voyelle, etc. Ainsi, après l'extraction des fonctionnalités, nos données ressemblent à:

# name    ends-vowel  num-vowels   length   gender
# ------------------------------------------------
Ashley        1         3           6        f
Brian         0         2           5        m
Caroline      1         4           8        f
David         0         2           5        m

L'objectif est de construire un arbre de décision . Un exemple d' arbre serait:

length<7
|   num-vowels<3: male
|   num-vowels>=3
|   |   ends-vowel=1: female
|   |   ends-vowel=0: male
length>=7
|   length=5: male

fondamentalement, chaque nœud représente un test effectué sur un seul attribut, et nous allons à gauche ou à droite en fonction du résultat du test. Nous continuons à parcourir l'arbre jusqu'à ce que nous atteignions un nœud de feuille qui contient la prédiction de classe ( mou f)

Donc, si nous exécutons le nom Amro dans cet arbre, nous commençons par tester " est la longueur <7? " Et la réponse est oui , alors nous descendons cette branche. Après la branche, le test suivant " est le nombre de voyelles <3? " Est à nouveau évalué comme vrai . Cela conduit à un nœud de feuille étiqueté m, et donc la prédiction est masculine (ce qui se trouve être, donc l'arbre a prédit le résultat correctement ).

L'arbre de décision est construit de façon descendante , mais la question est de savoir comment choisir l'attribut à diviser à chaque nœud? La réponse est de trouver la fonctionnalité qui divise le mieux la classe cible en nœuds enfants les plus purs possibles (c'est-à-dire: nœuds qui ne contiennent pas un mélange de nœuds masculins et féminins, plutôt purs avec une seule classe).

Cette mesure de pureté s'appelle l' information . Il représente la quantité d' informations attendue qui serait nécessaire pour spécifier si une nouvelle instance (prénom) doit être classée homme ou femme, compte tenu de l'exemple qui a atteint le nœud. Nous le calculons en fonction du nombre de classes masculines et féminines au nœud.

L'entropie d'autre part est une mesure d' impureté (l'inverse). Il est défini pour une classe binaire avec des valeursa/bas:

Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))

Cette fonction d'entropie binaire est illustrée dans la figure ci-dessous (une variable aléatoire peut prendre l'une des deux valeurs). Il atteint son maximum lorsque la probabilité est p=1/2, ce qui signifie que p(X=a)=0.5ou de même p(X=b)=0.5avoir une chance de 50% / 50% d'être soit aou b(l'incertitude est au maximum). La fonction d'entropie est au minimum nul lorsque la probabilité est p=1ou p=0en toute certitude ( p(X=a)=1ou p(X=a)=0respectivement, cela implique p(X=b)=1).

https://en.wikipedia.org/wiki/File:Binary_entropy_plot.svg

Bien sûr, la définition de l'entropie peut être généralisée pour une variable aléatoire discrète X avec N résultats (pas seulement deux):

entropie

(le logdans la formule est généralement considéré comme le logarithme de la base 2 )


Revenons à notre tâche de classification des noms, regardons un exemple. Imaginez qu'à un moment donné au cours du processus de construction de l'arbre, nous envisagions la répartition suivante:

     ends-vowel
      [9m,5f]          <--- the [..,..] notation represents the class
    /          \            distribution of instances that reached a node
   =1          =0
 -------     -------
 [3m,4f]     [6m,1f]

Comme vous pouvez le voir, avant la scission, nous avions 9 hommes et 5 femmes, c'est P(m)=9/14-à- dire et P(f)=5/14. Selon la définition de l'entropie:

Entropy_before = - (5/14)*log2(5/14) - (9/14)*log2(9/14) = 0.9403

Ensuite, nous le comparons à l'entropie calculée après avoir considéré la division en examinant deux branches enfants. Dans la branche gauche de ends-vowel=1, nous avons:

Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852

et la branche droite de ends-vowel=0, nous avons:

Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917

Nous combinons les entropies gauche / droite en utilisant le nombre d'instances dans chaque branche comme facteur de poids (7 instances sont allées à gauche et 7 instances à droite), et obtenons l'entropie finale après la scission:

Entropy_after = 7/14*Entropy_left + 7/14*Entropy_right = 0.7885

Maintenant, en comparant l'entropie avant et après la scission, nous obtenons une mesure du gain d'informations , ou de la quantité d'informations que nous avons obtenues en effectuant la scission en utilisant cette fonction particulière:

Information_Gain = Entropy_before - Entropy_after = 0.1518

Vous pouvez interpréter le calcul ci-dessus comme suit: en effectuant le fractionnement avec la end-vowelsfonctionnalité, nous avons pu réduire l'incertitude dans le résultat de la prédiction de sous-arbre d'une petite quantité de 0,1518 (mesurée en bits comme unités d'information ).

À chaque nœud de l'arbre, ce calcul est effectué pour chaque entité, et l'entité avec le plus grand gain d'informations est choisie pour la répartition de manière gourmande (favorisant ainsi les entités qui produisent des divisions pures avec une faible incertitude / entropie). Ce processus est appliqué de manière récursive à partir du nœud racine vers le bas et s'arrête lorsqu'un nœud feuille contient des instances ayant toutes la même classe (pas besoin de le diviser davantage).

Notez que j'ai ignoré certains détails qui dépassent le cadre de cet article, y compris comment gérer les fonctionnalités numériques , les valeurs manquantes , le sur- ajustement et l' élagage des arbres, etc.

Amro
la source
1
@ all3fox: cela est expliqué dans le dernier paragraphe, le processus devrait s'arrêter pour cette branche particulière si elle arrive à un nœud pur (un nœud feuille où toutes les instances appartiennent à la même classe, donc elle ne peut pas être divisée plus loin). Le nœud prédit ainsi la seule classe qu'il contient.
Amro
3
@ all3fox: en pratique, aller jusqu'aux nœuds purs produit des arbres de décision assez profonds qui souffrent de sur-ajustement (c'est-à-dire des arbres qui correspondent trop bien aux données d'apprentissage, mais qui se généralisent mal aux autres données non représentées dans l'ensemble d'apprentissage). Par conséquent, nous nous arrêtons généralement lorsque nous atteignons un certain nombre minimal d'instances dans les nœuds feuilles (et prédisons simplement la classe majoritaire) et / ou effectuons une sorte d'élagage (voir les liens Wikipedia fournis ci-dessus pour en savoir plus).
Amro
3
@Jas: c'est bien expliqué ici: en.wikipedia.org/wiki/…
Amro
1
@Rami: D'accord, pour éviter des problèmes comme le sur- ajustement , les arbres plus petits sont préférés aux plus grands (c'est-à-dire prendre des décisions avec moins de tests). Notez que l'heuristique par laquelle les entités de fractionnement sont choisies est un algorithme de recherche gourmand, de sorte que l'arbre généré n'est pas garanti d'être le plus petit possible dans l'espace de tous les arbres possibles (ni garanti qu'il soit globalement optimal d'une erreur de classification d'un wrt ). C'est en fait un problème NP-complet ...
Amro
1
@Rami: Fait intéressant, il existe des méthodes d' apprentissage d'ensemble qui adoptent une approche différente. Une idée est de randomiser l'algorithme d'apprentissage en choisissant un sous-ensemble aléatoire de fonctionnalités à chaque division candidate, et en construisant un tas de ces arbres aléatoires et en faisant la moyenne de leur résultat. Cela vaut également la peine de vérifier des algorithmes comme Random Forests .
Amro
45

Pour commencer, il serait préférable de comprendre the measure of information.

Comment utilisons-nous measureles informations?

Quand quelque chose de peu probable se produit, nous disons que c'est une grande nouvelle. De plus, lorsque nous disons quelque chose de prévisible, ce n'est pas vraiment intéressant. Donc, pour quantifier cela interesting-ness, la fonction doit satisfaire

  • si la probabilité de l'événement est 1 (prévisible), alors la fonction donne 0
  • si la probabilité de l'événement est proche de 0, alors la fonction devrait donner un nombre élevé
  • si la probabilité 0,5 événement se produit, cela donne one bitdes informations.

Une mesure naturelle qui satisfait aux contraintes est

I(X) = -log_2(p)

p est la probabilité de l'événement X. Et l'unité est dedans bit, le même bit que l'ordinateur utilise. 0 ou 1.

Exemple 1

Tirage au sort équitable:

Combien d'informations pouvons-nous obtenir d'un coup de pièce?

Répondre : -log(p) = -log(1/2) = 1 (bit)

Exemple 2

Si un météore frappe la Terre demain, p=2^{-22}alors nous pouvons obtenir 22 bits d'informations.

Si le Soleil se lève demain, p ~ 1alors c'est 0 bit d'information.

Entropie

Donc, si nous nous attendons à interesting-nessun événement Y, c'est l'entropie. l'entropie est une valeur attendue de l'intérêt d'un événement.

H(Y) = E[ I(Y)]

Plus formellement, l'entropie est le nombre attendu de bits d'un événement.

Exemple

Y = 1: un événement X se produit avec une probabilité p

Y = 0: un événement X ne se produit pas avec la probabilité 1-p

H(Y) = E[I(Y)] = p I(Y==1) + (1-p) I(Y==0) 
     = - p log p - (1-p) log (1-p)

Journal de base 2 pour tous les journaux.

VforVitamin
la source
22

Je ne peux pas vous donner de graphiques, mais je peux peut-être donner une explication claire.

Supposons que nous ayons un canal d'information, comme une lumière qui clignote une fois par jour, rouge ou verte. Combien d'informations transmet-il? La première supposition pourrait être un bit par jour. Mais que se passe-t-il si nous ajoutons du bleu, afin que l'expéditeur ait trois options? Nous aimerions avoir une mesure de l'information qui peut gérer des choses autres que des puissances de deux, mais toujours être additive (la façon dont multiplier le nombre de messages possibles par deux ajoute un bit). Nous pourrions le faire en prenant le journal 2 (nombre de messages possibles), mais il s'avère qu'il existe un moyen plus général.

Supposons que nous soyons revenus au rouge / vert, mais l'ampoule rouge a grillé (c'est une notoriété publique) de sorte que la lampe doit toujours clignoter en vert. La chaîne est maintenant inutile, nous savons ce que sera le prochain flashdonc les flashs ne transmettent aucune information, aucune nouvelle. Maintenant, nous réparons l'ampoule mais imposons une règle selon laquelle l'ampoule rouge ne peut pas clignoter deux fois de suite. Lorsque la lampe clignote en rouge, nous savons quel sera le prochain flash. Si vous essayez d'envoyer un flux binaire par ce canal, vous constaterez que vous devez le coder avec plus de flashs que vous n'en avez (50% de plus, en fait). Et si vous voulez décrire une séquence de flashs, vous pouvez le faire avec moins de bits. La même chose s'applique si chaque flash est indépendant (hors contexte), mais les flashs verts sont plus courants que les rouges: plus la probabilité est asymétrique, moins vous avez besoin de bits pour décrire la séquence et moins elle contient d'informations, jusqu'à la tout-vert, limite de brûlure de l'ampoule.

Il s'avère qu'il existe un moyen de mesurer la quantité d'informations dans un signal, en fonction des probabilités des différents symboles. Si la probabilité de recevoir le symbole x i est p i , alors considérons la quantité

-log p i

Plus p i est petit , plus cette valeur est élevée. Si x i devient deux fois moins probable, cette valeur augmente d'un montant fixe (log (2)). Cela devrait vous rappeler d'ajouter un bit à un message.

Si nous ne savons pas ce que sera le symbole (mais nous connaissons les probabilités), alors nous pouvons calculer la moyenne de cette valeur, combien nous obtiendrons, en additionnant les différentes possibilités:

I = -Σ p i log (p i )

C'est le contenu de l'information en un éclair.

Ampoule rouge grillée: p rouge = 0, p vert = 1, I = - (0 + 0) = 0
Rouge et vert équiprobable: p rouge = 1/2, p vert = 1/2 , I = - (2 * 1/2 * log (1/2)) = log (2)
Trois couleurs, équiprobables: p i = 1/3, I = - (3 * 1/3 * log (1/3)) = log (3)
Vert et rouge, vert deux fois plus probable: p rouge = 1/3 , p vert = 2/3, I = - (1/3 log (1/3) + 2/3 log (2/3)) = log ( 3) - 2/3 log (2)

Il s'agit du contenu de l'information, ou entropie, du message. Elle est maximale lorsque les différents symboles sont équiprobables. Si vous êtes physicien, vous utilisez le journal naturel, si vous êtes un informaticien, vous utilisez le journal 2 et obtenez des bits.

Bêta
la source
10

Je vous recommande vraiment de lire sur la théorie de l'information, les méthodes bayésiennes et MaxEnt. Le point de départ est ce livre (disponible gratuitement en ligne) de David Mackay:

http://www.inference.phy.cam.ac.uk/mackay/itila/

Ces méthodes d'inférence sont vraiment bien plus générales que le simple text mining et je ne peux pas vraiment imaginer comment on pourrait l'appliquer à la PNL sans apprendre certaines des bases générales contenues dans ce livre ou d'autres livres d'introduction sur l'apprentissage automatique et le bayésien MaxEnt méthodes.

Le lien entre l'entropie et la théorie des probabilités au traitement et au stockage de l'information est vraiment, vraiment profond. Pour en donner un aperçu, il y a un théorème dû à Shannon qui stipule que la quantité maximale d'informations que vous pouvez passer sans erreur à travers un canal de communication bruyant est égale à l'entropie du processus de bruit. Il existe également un théorème qui relie la quantité de données que vous pouvez compresser pour occuper la mémoire minimale possible de votre ordinateur à l'entropie du processus qui a généré les données.

Je ne pense pas qu'il soit vraiment nécessaire que vous alliez en apprendre davantage sur tous ces théorèmes sur la théorie de la communication, mais il n'est pas possible d'apprendre cela sans apprendre les bases de ce qu'est l'entropie, comment elle est calculée, quelle est sa relation avec l'information et l'inférence, etc. ...

Rafael S. Calsaverini
la source
avait les mêmes pensées Rafael. C'est comme demander ce qu'est la physique quantique sur le débordement de pile, un domaine très large qui ne se distille pas bien en une seule réponse.
Mark Essel
5

Lorsque j'ai implémenté un algorithme pour calculer l'entropie d'une image, j'ai trouvé ces liens, voir ici et ici .

C'est le pseudo-code que j'ai utilisé, vous devrez l'adapter pour travailler avec du texte plutôt qu'avec des images mais les principes devraient être les mêmes.

//Loop over image array elements and count occurrences of each possible
//pixel to pixel difference value. Store these values in prob_array
for j = 0, ysize-1 do $
    for i = 0, xsize-2 do begin
       diff = array(i+1,j) - array(i,j)
       if diff lt (array_size+1)/2 and diff gt -(array_size+1)/2 then begin
            prob_array(diff+(array_size-1)/2) = prob_array(diff+(array_size-1)/2) + 1
       endif
     endfor

//Convert values in prob_array to probabilities and compute entropy
n = total(prob_array)

entrop = 0
for i = 0, array_size-1 do begin
    prob_array(i) = prob_array(i)/n

    //Base 2 log of x is Ln(x)/Ln(2). Take Ln of array element
    //here and divide final sum by Ln(2)
    if prob_array(i) ne 0 then begin
        entrop = entrop - prob_array(i)*alog(prob_array(i))
    endif
endfor

entrop = entrop/alog(2)

J'ai obtenu ce code quelque part, mais je ne peux pas creuser le lien.

Matt Warren
la source
Il y a tellement de fonctions d'entropie () différentes pour les images mais sans bons aperçus? Comment pouvez-vous comparer votre code à l'entropie de Matlab () et au code ici mathworks.com/matlabcentral/fileexchange/28692-entropy Dans ce dernier, le développeur dit que c'est pour les signaux 1D mais les utilisateurs continuent de l'étendre en 2D. - - Votre fonction d'entropie suppose que le signal d'origine est de 2 bits et est plutôt simpliste. Supposons qu'il s'agit d'un signal d'arythmie ECG MIT-BIH (11 bits) mais généré pour des images 2D. Je pense que vous ne pouvez pas utiliser une simple base 2 bits ici.
Léo Léopold Hertz
5

Informellement

l'entropie est la disponibilité d'informations ou de connaissances, le manque d'informations entraînera des difficultés dans la prédiction de l'avenir, ce qui est une entropie élevée (prédiction du mot suivant dans l'exploration de texte) et la disponibilité des informations / connaissances nous aidera à une prédiction plus réaliste de l'avenir (faible entropie).

Les informations pertinentes de tout type réduiront l'entropie et nous aideront à prédire un avenir plus réaliste, que les informations peuvent être le mot "viande" est présent dans la phrase ou le mot "viande" n'est pas présent. C'est ce qu'on appelle le gain d'informations


Officiellement

l'entropie est un manque d'ordre de prévisibilité

Waseem Ahmad Naeem
la source
0

Alors que vous lisez un livre sur NLTK, il serait intéressant de lire sur le module de classification MaxEnt http://www.nltk.org/api/nltk.classify.html#module-nltk.classify.maxent

Pour la classification d'exploration de texte, les étapes peuvent être: le pré-traitement (tokenisation, vaporisation, sélection de fonctionnalités avec Information Gain ...), la transformation en numérique (fréquence ou TF-IDF) (je pense que c'est l'étape clé à comprendre lors de l'utilisation texte en entrée d'un algorithme qui n'accepte que du numérique), puis classer avec MaxEnt, bien sûr, ce n'est qu'un exemple.

Paulo
la source