Je suppose que l'entropie a été mentionné dans le contexte de la construction d' arbres de décision.
Pour illustrer, imaginez la tâche de l'apprentissage à classer premier-les noms en mâle/femelle groupes. C'est la liste des noms de chaque marquées avec m
ou f
, nous voulons apprendre un modèle qui s'adapte aux données et peut être utilisé pour prédire le sexe d'un nouveau invisible, premier-nom.
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 est de décider ce que les caractéristiques des données sont pertinentes pour la classe cible nous voulons prédire. Quelques exemples de fonctionnalités: la première/dernière lettre, la longueur, le nombre de voyelles, il se termine par une voyelle, etc.. Donc après extraction de caractéristiques, notre apparence des données:
# 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'un 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ésentent un test effectué sur un seul attribut, et nous allons à gauche ou à droite selon le résultat de l'essai. Nous gardons de la traversée de l'arbre jusqu'à ce que nous arrivons à un nœud feuille qui contient la classe de prédiction (m
ou f
)
Donc, si nous courons le nom Amro en bas de cet arbre, nous commençons par tester "est le legth<7?" et la réponse est oui, alors nous aller dans cette direction. À la suite de la branche, le prochain test "est le nombre de voyelles<3?" encore une fois évalue à true. Cela conduit à un nœud feuille étiquetée m
, et donc la prédiction est de sexe masculin (ce qui m'arrive d'être, si l'arbre a prédit le résultat correctement).
L'arbre de décision est construit de haut en bas de la mode, mais la question est de savoir comment vous choisissez l'attribut à split à chaque nœud? La réponse est de trouver la fonction qui mieux divise la classe cible dans la plus pure possible nœuds enfants (ie: les nœuds qui ne contiennent pas un mélange des deux, mâle et femelle, plutôt pure nœuds avec une seule classe).
Cette mesure de la pureté est appelée l' information. Il représente le prévu quantité d' informations qui seraient nécessaires pour préciser si une nouvelle instance (première du nom) doivent être classés de sexe masculin ou féminin, donné l'exemple qui atteint le nœud. Nous le calculons
sur la base du nombre d'hommes et de femmes des classes au nœud.
L'entropie sur l'autre main est une mesure de l'impureté (au contraire). Il est défini pour un binaire de la classe avec les valeurs de a
/b
comme:
Entropy = - p(a)*log(p(a)) - p(b)*log(p(b))
Cette entropie binaire fonction est illustrée dans la figure ci-dessous (variable aléatoire peut prendre l'une des deux valeurs). Il atteint son maximum lorsque la probabilité est - p=1/2
, ce qui signifie qu' p(X=a)=0.5
ou de mêmep(X=b)=0.5
a 50%/50% de chances d'être soit a
ou b
(incertitude est à son maximum). L'entropie de la fonction est à zéro minimum lorsque la probabilité est - p=1
ou p=0
avec une complète certitude (p(X=a)=1
ou p(X=a)=0
respectivement, ce dernier 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 (et pas seulement deux):
( log
dans la formule est généralement considéré comme le logarithme à base 2)
De retour à notre tâche de classification nom, permet de regarder un exemple. Imaginez à un certain moment au cours du processus de construction de l'arbre, nous avons examiné la répartition:
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 mâles et 5 femelles, c'est à dire P(m)=9/14
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
À côté de nous comparer avec l'entropie calculée après avoir tenu compte de la scission en regardant les deux branches enfants. Dans la branche gauche de l' ends-vowel=1
, nous avons:
Entropy_left = - (3/7)*log2(3/7) - (4/7)*log2(4/7) = 0.9852
et la branche droite de l' ends-vowel=0
, nous avons:
Entropy_right = - (6/7)*log2(6/7) - (1/7)*log2(1/7) = 0.5917
Nous combinons la gauche/droit des entropies en utilisant le nombre d'occurrences de chaque branche comme facteur de pondération (7 cas allés à gauche, et 7 cas allés à droite), et le dernier entropie après la scission de:
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 de gain d'informations, ou la quantité d'informations que nous avons acquises par faire la fente à l'aide de cette fonctionnalité:
Information_Gain = Entropy_before - Entropy_after = 0.1518
Vous pouvez interpréter le calcul ci-dessus comme suit: en faisant la scission avec l' end-vowels
fonctionnalité, nous avons été en mesure de réduire l'incertitude dans le sous-arbre de prédiction des résultats par 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 fonction, et la fonction avec le plus grand gain d'informations est choisi pour le split, dans un gourmand (favorisant ainsi les caractéristiques qui produisent de la pure divise avec une faible incertitude/entropie). Ce processus est appliqué de manière récursive à partir de la racine-noeud en bas, et s'arrête quand un nœud feuille contient des instances ayant tous la même classe (pas besoin de le diviser encore plus).
Notez que j'ai sauté sur certains détails qui sont au-delà de la portée de ce post, y compris la façon de gérer numérique caractéristiques, valeurs manquantes, le surajustement et l'élagage des arbres, etc..