Dans Random Forest, chaque arbre est cultivé en parallèle sur un échantillon boostrap unique des données. Étant donné que chaque échantillon boostrap devrait contenir environ 63% d'observations uniques, cela laisse environ 37% d'observations, qui peuvent être utilisées pour tester l'arbre.
Maintenant, il semble que dans le boosting de gradient stochastique, il existe également une similaire à celle de RF:
Si bag.fraction est défini pour être supérieur à 0 (0,5 est recommandé), gbm calcule une estimation hors sac de l'amélioration des performances prédictives. Il évalue la réduction de l'écart par rapport aux observations non utilisées pour sélectionner le prochain arbre de régression.
Source: Ridgeway (2007) , section 3.3 (page 8).
J'ai du mal à comprendre comment cela fonctionne / est valide. Disons que j'ajoute un arbre dans la séquence. Je fais pousser cet arbre sur un sous-échantillon aléatoire de l'ensemble de données d'origine. J'ai pu tester cet arbre unique sur les observations qui n'ont pas été utilisées pour le faire pousser. D'accord. MAIS , puisque Boosting est séquentiel, j'utilise plutôt toute la séquence d'arbres construits jusqu'à présent pour fournir une prédiction pour ces observations laissées de côté. Et, il y a de fortes chances que bon nombre des arbres précédents aient déjà vu ces observations. Donc, le modèle n'est pas vraiment testé à chaque tour sur des observations invisibles comme avec RF, non?
Alors, comment se fait-il que cela s'appelle une estimation d'erreur "hors du sac"? Pour moi, il ne semble pas être "sorti" de tout sac puisque les observations ont déjà été vues?
Réponses:
Répondre en partie seulement (et ajouter une nouvelle question à votre question).
L'implémentation de gbm dans R http://www.rdocumentation.org/packages/gbm/functions/gbm a deux paramètres pour ajuster certains hors-bagness.
a)
train.fraction
définira une proportion des données qui sont utilisées pour former tous les arbres et donc 1-train.fraction
seront de vraies données OOB (hors sac).b)
bag.fraction
définira la proportion de données d'entraînement à utiliser dans la création de l'arbre suivant du boost. Ainsi, il peut y avoir des données qui ne sont jamais utilisées pour la création d'un arbre et elles peuvent vraiment être utilisées comme données OOB (mais c'est peu probable, voir la question ci-dessous)Ce qui m'amène à la question. Votre analyse de 37% des données comme étant OOB est vraie pour un seul arbre. Mais la chance qu'il y ait des données qui ne sont pas utilisées dans N'IMPORTE QUEL arbre est beaucoup plus petite - (elle doit être dans l'OOB pour tous les arbres - ma compréhension est que chaque arbre fait son propre bootstrap). Donc, dans RandomForests, il devrait être très peu probable qu'il y ait un OOB pour tester la forêt. Et pourtant, l'implémentation randomForest dans R (basée sur le code original de Breiman) parle beaucoup d'OOB (par exemple les données de résultat et voir http://www.rdocumentation.org/packages/randomForest/functions/randomForest ) n t r e e0,37n t r e e s n t r e e
err.rate
confusion
Je ne sais pas comment répondre à cela (et je vous remercie (+1) d'avoir posé la question et de m'avoir fait réaliser que je ne comprenais pas cet aspect de randomForests). La solution possible est qu'il n'y a qu'un seul bootstrap - et tous les arbres sont construits à partir de celui-ci - mais pour autant que je sache, ce n'est pas le cas.
la source
train.fraction
paramètre (qui est juste une caractéristique de la fonction gbm mais n'est pas présent dans l'algorithme d'origine) mais vraiment du fait que seul un sous-échantillon du les données sont utilisées pour former chaque arbre dans la séquence, en laissant de côté les observations (qui peuvent être utilisées pour les tests). Ce qui revient à ma question initiale. Comment ces observations peuvent-elles être utilisées pour les tests, car elles ont probablement été vues plusieurs fois par de nombreux arbres précédents dans la séquence?Je crois qu'ils font une estimation hors sac à chaque étape. Étant donné que les résultats de toutes les étapes sont ajoutés (avec des coefficients), les erreurs OOB peuvent également être ajoutées avec les mêmes coefficients.
la source