Diminution de Gini et impureté de Gini des nœuds enfants

15

Je travaille sur la mesure d'importance de la fonctionnalité Gini pour la forêt aléatoire. Par conséquent, je dois calculer la diminution de Gini de l'impureté du nœud. Voici la façon dont je le fais, ce qui conduit à un conflit avec la définition, suggérant que je dois me tromper quelque part ... :)

Pour un arbre binaire, et étant donné les probabilités des enfants gauche et droit, je peux calculer l'impureté de Gini d'un nœud :n

i(n)=1pl2pr2

Et la baisse de Gini:

Δi(n)=i(n)pli(nl)pri(nr)

Donc, pour cet exemple avec 110 observations sur un nœud:

- node (110)
   - left (100)
      - left_left (60)
      - left_right (40)
   - right (10)
      - right_left (5)
      - right_right (5)

Je calculerais la diminution de Gini pour le nœud comme ceci:

je(leFt)=1-(60/100)²-(40/100)²=0,48je(rjeght)=1-(5/dix)²-(5/dix)²=0,50je(noe)=1-(100/110)²-(dix/110)²=0,16

Mais suivant la définition de Breiman (ou cette réponse sur CV: Comment mesurer / classer "l'importance variable" lors de l'utilisation de CART , mais je n'ai pas accès au livre référencé), le critère d'impureté du descendant doit être inférieur à celui du parent nœud:

Importance de Gini
Chaque fois qu'un fractionnement d'un nœud est effectué sur la variable m, le critère d'impureté de Gini pour les deux nœuds descendants est inférieur à celui du nœud parent. L'addition des diminutions de gini pour chaque variable individuelle sur tous les arbres de la forêt donne une importance variable rapide qui est souvent très cohérente avec la mesure de l'importance de la permutation.

Parce que sinon, cela conduit à une diminution négative de Gini ...

Δi(node)=i(node)(100/110)i(left)(10/110)i(right)=0,32

Donc, si quelqu'un pouvait dire où je me trompe, je serais très reconnaissant car il semble que je manque quelque chose d'évident ici ...

Rémi Mélisson
la source

Réponses:

16

Vous n'avez tout simplement pas utilisé du tout la variable de classe cible. L'impureté de Gini, comme toutes les autres fonctions d'impureté, mesure l'impureté des sorties après une séparation. Ce que vous avez fait, c'est mesurer quelque chose en utilisant uniquement la taille de l'échantillon.

J'essaie de dériver la formule de votre cas.

Supposons pour plus de simplicité que vous ayez un classificateur binaire. Notons avec l'attribut de test, avec l'attribut de classe qui ont des valeurs .C c + , c -UNECc+,c-

L'index de Gini initial avant la division est donné par où est la proportion de points de données qui ont une valeur pour la classe variable. P ( A + ) c +

je(UNE)=1-P(UNE+)2-P(UNE-)2
P(UNE+)c+

Maintenant, l'impureté pour le nœud gauche serait où est la proportion de points de données du sous-ensemble gauche de qui ont la valeur dans la variable de classe, etc. I ( A r ) = 1 - P ( A r + ) 2 - P ( A r - ) 2 P ( A l + ) A c +

je(UNEl)=1-P(UNEl+)2-P(UNEl-)2
je(UNEr)=1-P(UNEr+)2-P(UNEr-)2
P(UNEl+)UNEc+

Maintenant, la formule finale pour GiniGain serait

gjenjegunejen(UNE)=je(UNE)-pleFtje(UNEl)-prjeghtje(UNEr)
où est la proportion d'instances pour le sous-ensemble gauche, ou (nombre d' instances en partie gauche divisé par le nombre total de cas de .pleFt#|UNEl|#|UNEl|+#|UNEr|UNE

Je sens que ma notation pourrait être améliorée, je regarderai plus tard quand j'aurai plus de temps.

Conclusion

L'utilisation d'un nombre limité de points de données n'est pas suffisante, l'impureté signifie à quel point une entité (entité de test) est capable de reproduire la distribution d'une autre entité (entité de classe). La distribution des fonctionnalités de test produit le nombre que vous avez utilisé (comment à gauche, comment à droite), mais la distribution de la fonctionnalité de classe n'est pas utilisée dans vos formules.

Édition ultérieure - prouver pourquoi il diminue

Maintenant, j'ai remarqué que j'ai raté la partie, ce qui prouve pourquoi l'index gini du nœud enfant est toujours inférieur à celui du nœud parent. Je n'ai pas de preuve complète ou vérifiée, mais je pense que c'est une preuve valide. Pour d'autres choses intéressantes liées au sujet, vous pouvez consulter la note technique: Certaines propriétés des critères de fractionnement - Leo Breiman . Maintenant, il suivra ma preuve.

Supposons que nous soyons dans le cas binaire, et toutes les valeurs d'un nœud pourraient être complètement décrites par une paire avec la signification d' instance de la première classe et de instances de la deuxième classe. Nous pouvons dire que dans le nœud parent que nous avons(une,b)uneb(une,b) instances.

Afin de trouver le meilleur fractionnement, nous trions les instances selon une fonctionnalité de test et nous essayons tous les fractionnements binaires possibles. Trié par une caractéristique donnée est en fait une permutation d'instances, dans laquelle les classes commencent par une instance de la première classe ou de la deuxième classe. Sans perdre la généralité, nous supposerons qu'elle commence par une instance de la première classe (si ce n'est pas le cas nous avons une preuve miroir avec le même calcul).

La première division à essayer est dans les instances gauche et droite . Comment l'index gini de ces candidats possibles pour les nœuds enfants gauche et droit est comparé au nœud parent? Évidemment, à gauche, nous avons . Donc, sur le côté gauche, nous avons une valeur d'indice de Gini plus petite. Et le bon nœud?(1,0)(une-1,b)h(leFt)=1-(1/1)2-(0/1)2=0

h(punerent)=1-(uneune+b)2-(bune+b)2
h(rjeght)=1-(une-1(une-1)+b)2-(b(une-1)+b)2

Considérant que est supérieur ou égal à (car sinon comment pourrions-nous séparer une instance de la première classe dans le nœud gauche?) Et après simplification, il est simple de voir que l'index gini pour le nœud droit a une valeur plus petite que pour le nœud parent.une0

Maintenant, la dernière étape de la preuve consiste à nouer que, tout en considérant tous les points de partage possibles dictés par les données que nous avons, nous gardons celui qui a le plus petit indice de Gini agrégé, ce qui signifie que l'optimum que nous choisissons est inférieur ou égal au trivial que j'ai prouvé qui est plus petit. Ce qui conclut qu'à la fin l'indice de Gini va diminuer.

En conclusion finale, nous devons noter que même si diverses divisions peuvent donner des valeurs plus grandes que le nœud parent, celle que nous choisissons sera la plus petite d'entre elles et également plus petite que la valeur d'index gini parent.

J'espère que cela aide.

rapaio
la source
Merci beaucoup, vous avez déverrouillé mon cerveau ... En fait, puisque je traite des arbres de régression, l'utilisation de la variable de classe cible est apparue moins évidente que pour une tâche de classification pure. Mais cela a désormais tout son sens.
Remi Mélisson
J'ai mis à jour la réponse pour contenir les pièces manquantes.
rapaio