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 m
ou 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 ( m
ou 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
/b
as:
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.5
ou de même p(X=b)=0.5
avoir une chance de 50% / 50% d'être soit a
ou b
(l'incertitude est au maximum). La fonction d'entropie est au minimum nul lorsque la probabilité est p=1
ou p=0
en toute certitude ( p(X=a)=1
ou p(X=a)=0
respectivement, cela implique p(X=b)=1
).
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):
(le log
dans 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-vowels
fonctionnalité, 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.