Je voudrais savoir si la forêt aléatoire de Breiman (forêt aléatoire dans le package R randomForest) utilise comme critère de fractionnement (critère de sélection d'attribut) le gain d'informations ou l'indice de Gini? J'ai essayé de le découvrir sur http://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm et dans la documentation du paquet randomForest dans R. Mais la seule chose que j'ai trouvée est que l'index Gini peut être utilisé pour informatique d'importance variable.
r
random-forest
entropy
gini
quelqu'un
la source
la source
Réponses:
Le package randomForest dans R par A. Liaw est un port du code d'origine étant un mélange de code c (traduit), du code fortran restant et du code wrapper R. Pour décider de la meilleure répartition globale entre les points d'arrêt et les différentes variables, le code utilise une fonction de notation similaire à gini-gain:
Où est une fonctionnalité donnée, est le noeud sur lequel la séparation doit être effectuée, et et sont les deux noeuds fils créés par fractionnement . est le nombre d'éléments dans un nœud.N N 1 N 2 N | . |X N N1 N2 N | . |
Et , où est le nombre de catégories dans le nœudG i n i ( N) = 1 - ∑Kk = 1p2k K
Mais la fonction de notation appliquée n'est pas exactement la même, mais plutôt une version équivalente plus efficace en termes de calcul. et | N | sont constants pour toutes les divisions comparées et donc omis.G i n i ( N)
Permet également d'inspecter la pièce si la somme de la prévalence au carré dans un nœud (1) est calculée comme| N2|| N|G i n i ( N2) ∝ | N2| Gini( N2) = | N2| (1- ∑Kk = 1p2k) = | N2| ∑ n c l a s s22 , k| N2|2
où est le nombre de classes de la classe cible k dans le nœud fille 1. Remarqueest placé à la fois au nominateur et au dénominateur.n c l a s s1 , k | N2|
retirer la constante triviale de l'équation de telle sorte que la meilleure décision partagée consiste à maximiser la somme pondérée de la taille des nœuds de la prévalence de la classe au carré1 -
score =| N1| ∑Kk = 1p21 , k+ | N2| ∑Kk = 1p22 , k= | N1| ∑Kk = 1n c l a s s21 , k| N1|2+ | N2| ∑Kk = 1n c l a s s22 , k| N2|2
= ∑Kk = 1n c l a s s22 , k1| N1|- 1+ ∑Kk = 1n c l a s s22 , k1| N1|- 2
= n o m i n a t o r1/ de n o m i n a t o r1+ n o m i n a t o r2/ de n o m i n a t o r2
L'implémentation permet également une pondération ascendante / descendante par classe des échantillons. Également très important lorsque l'implémentation met à jour ce gain gini modifié, le déplacement d'un seul échantillon d'un nœud à l'autre est très efficace. L'échantillon peut être soustrait des nominateurs / dénominateurs d'un nœud et ajouté aux autres. J'ai écrit un prototype-RF il y a quelques mois, recalculant par ignorance à partir de zéro gini-gain pour chaque point d'arrêt et c'était plus lent :)
Si plusieurs scores de division sont les meilleurs, un gagnant aléatoire est choisi.
Cette réponse était basée sur l'inspection du fichier source "randomForest.xxtar.gz / src / classTree.c" ligne 209-250
la source