Question:
utilisation déséquilibrée et déséquilibrée des variables prédictives dans Random Forest
zima
2012-11-23 19:57:01 UTC
view on stackexchange narkive permalink

Je travaille sur la prédiction Random Forest, en mettant l'accent sur l'importance des variables prédictives, et j'ai une question concernant la compréhension de mtry et l'utilisation réelle des variables dans les arbres de Random Forest dans R (package randomForest).

J'ai un échantillon avec plus de 1000 observations et un vecteur de réponse avec classification en 2 classes: 0 et 1. J'ai 4 variables indépendantes. Pour l'expérience, j'ai choisi les paramètres suivants:

  rftry1 = randomForest (x, y, xtest, ytest, mtry = 4, ntree = 500, importance = TRUE, keep.forest = TRUE, do.trace = TRUE, replace = TRUE, keep.inbag = TRUE, proximité = TRUE)  

Je vérifie ensuite quelles variables ont été réellement utilisées dans la forêt, et trouve une utilisation très biaisée :

  > varUsed (rftry1)  

[1] 2436 1758 1988 1156

L'utilisation diminue considérablement du premier au la 4e variable. Cela affecterait-il réellement la prédiction? Pourquoi cela se passe-t-il comme ça?

J'ai ensuite relancé l'expérience avec mtry = 2, et l'utilisation a globalement diminué mais est toujours proportionnelle à l'utilisation de la première.

  MeanDecreaseAccuracy MeanDecreaseGini  

1 0,006535855 2,1771482 0,224706591 127,1062683 0,006633846 5,0204564 0,017522580 36,867821

J'ai remarqué que la fréquence d'utilisation de la variable dans les arbres n'affecte pas l'importance dans la mesure du changement de l'ordre d'importance des variables. Donc mes 2 questions principales sont:

1) Je suppose que je ne comprends pas exactement ce que mtry contrôle (j'ai lu le nombre de variables échantillonnées à chaque split). J'ai remarqué qu'avec mtry 2 et 4 certaines des variables ont été réutilisées dans l'arbre, alors qu'avec m = 1 elles ne l'ont pas été et les arbres étaient beaucoup plus courts. Dois-je bien comprendre quand je dis:

mtry = 2 signifie qu'à chaque division, au lieu de choisir fermement une variable suivante à diviser, nous choisirons au hasard parmi 2? Si j'ai 4 variables au total et que la variable 1 a été utilisée pour la toute première division - quels sont mes choix pour la fille gauche et la fille droite sur lesquelles se séparer?

2) La mtry est-elle liée à l'utilisation déséquilibrée des variables pour split? Pourquoi les variables sont-elles utilisées comme ça et cela affecte-t-il le résultat de la prédiction de faire un biais?

Toutes mes variables sont sous la forme de facteurs où 3 ont 2 niveaux et un a 3 niveaux.

Merci pour vos réponses!

Mon TL; DR serait que `varUsed ()` est uniquement interne et n'est pas une grande mesure de quoi que ce soit;une var qui s'habitue en haut de l'arbre donnera un compte plus bas que si elle était utilisée 2 ^ N fois, N niveaux plus bas.
Un répondre:
jbowman
2012-11-23 23:25:32 UTC
view on stackexchange narkive permalink

La partie de l'algorithme global de forêt aléatoire qui utilise mtry est (adapté de Les éléments d'apprentissage statistique):

À chaque nœud terminal qui est plus grande que la taille minimale,

1) Sélectionnez les variables mtry au hasard parmi les variables de régresseur $ p $,

2) À partir de ces mtry variables, choisissez la meilleure variable et le meilleur point de partage,

3) Divisez le nœud en deux nœuds filles en utilisant la variable et le point de partage choisis.

En aparté - vous pouvez utiliser la fonction tuneRF dans le package randomForest pour sélectionner le mtry "optimal" pour vous, en utilisant l'estimation d'erreur hors sac comme critère.

La sélection aléatoire de variables à chaque étape de division des nœuds est ce qui en fait une forêt aléatoire, par opposition à juste un estimateur ensaché. Citant les éléments de l'apprentissage statistique, p 588 dans la deuxième édition:

L'idée dans les forêts aléatoires ... est d'améliorer la réduction de la variance de l'ensachage en réduisant la corrélation entre les arbres, sans augmenter trop la variance. Ceci est réalisé dans le processus de croissance des arbres grâce à la sélection aléatoire des variables d'entrée.

Il n'y a pas d'augmentation incrémentielle du biais à cause de cela. Bien sûr, si le modèle lui-même est fondamentalement biaisé, par exemple en omettant des variables prédictives importantes, l'utilisation de forêts aléatoires n'améliorera pas la situation, mais cela ne l'empira pas non plus.

L'utilisation déséquilibrée des variables prédictives reflète simplement le fait que certaines sont moins importantes que d'autres, où important est utilisé dans un sens heuristique plutôt que formel, et par conséquent, pour certains arbres, peut ne pas être utilisé souvent ou à tout. Par exemple, pensez à ce qui se passerait si vous aviez une variable qui était à peine significative sur l'ensemble de données complet, mais que vous génériez ensuite un grand nombre d'ensembles de données bootstrap à partir de l'ensemble de données complet et exécutiez à nouveau la régression sur chaque ensemble de données bootstrap. Vous pouvez imaginer que la variable serait insignifiante sur beaucoup de ces ensembles de données bootstrap. Maintenant, comparez à une variable qui était extrêmement significative sur l'ensemble de données complet; il serait probablement significatif sur presque tous les ensembles de données bootstrap également. Donc, si vous comptiez la fraction de régressions pour laquelle chaque variable a été "sélectionnée" en étant significative, vous obtiendrez un décompte déséquilibré entre les variables. C'est un peu (mais seulement un peu) analogue à ce qui se passe à l'intérieur de la forêt aléatoire, seule la sélection de variables est basée sur "meilleur à chaque division" plutôt que "p-value < 0.05" ou quelque chose du genre.

MODIFIER en réponse à une question du PO: Notez cependant que les mesures de l'importance des variables ne sont pas basées uniquement sur le nombre de fois qu'une variable est utilisée dans un fractionnement. Par conséquent, vous pouvez avoir des variables "importantes" (mesurées par "importance") qui sont utilisées moins souvent dans les divisions que des variables moins "importantes" (mesurées par "importance".) Par exemple, considérez le modèle:

$ y_i = I (x_i > c) + 0.25 * z_i ^ 2 + e_i $

tel qu'implémenté et estimé par le code R suivant:

  x < - runif (500) z <- rnorm (500) y <- (x>0.5) + z * z / 4 + rnorm (500) df <- data.frame (list (y = y, x = x, z = z, junk1 = rnorm (500), junk2 = runif (500), junk3 = rnorm (500))) foo <- randomForest (y ~ x + z + junk1 + junk2 + junk3, mtry = 2, data = df) importance (toto) IncNodePurityx 187.38456z 144.92088
junk1 102.41875junk2 93.61086junk3 92.59587varUsed (toto) [1] 16916 17445 16883 16434 16453  

Ici, $ x $ a une importance plus élevée, mais $ z $ est utilisé plus fréquemment dans les divisions; L'importance de $ x $ est élevée mais dans un certain sens très locale, tandis que $ z $ est plus importante sur toute la gamme des valeurs $ z $.

Pour une discussion plus complète sur les forêts aléatoires, voir le Chap. 15 of The Elements ..., que le lien ci-dessus vous permet de télécharger gratuitement au format pdf.

Merci @jbowman, c'est une réponse fantastique. Il est logique pour moi que les variables les plus importantes soient davantage utilisées et sélectionnées davantage. Mais ce qui m'a vraiment embrouillé, c'est que les variables les plus utilisées (la variable n ° 1, par exemple), ne sont de loin pas les plus importantes! y a-t-il quelque chose qui ne va pas alors? La variable de loin la plus importante (# 2) n'est pas utilisée aussi souvent pour les fractionnements. Peut-être que je n'obtiens toujours pas quelque chose.
J'ai ajouté une section EDIT à ma réponse pour résoudre ce problème, j'espère que cela aide ...
Mon TL; DR serait que `varUsed ()` est uniquement interne et n'est pas une grande mesure de quoi que ce soit;une var qui s'habitue en haut de l'arbre donnera un compte plus bas que si elle était utilisée 2 ^ N fois, N niveaux plus bas.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...