L'implémentation de forêt aléatoire dans scikit-learn utilise-t-elle la précision moyenne comme méthode de notation pour estimer l'erreur de généralisation avec des échantillons hors sac? Ceci n'est pas mentionné dans la documentation, mais la méthode score () rapporte la précision moyenne.
J'ai un ensemble de données très déséquilibré et j'utilise l'AUC de ROC comme métrique de notation dans la recherche dans la grille. Existe-t-il un moyen de dire au classificateur d'utiliser également la même méthode de notation sur les échantillons OOB?
random-forest
scikit-learn
darXider
la source
la source
oob_score
rapportez l'exactitude. Je dois cependant regarder à nouveau le code source.Réponses:
En général, les performances des classificateurs sont comparées en utilisant la précision, c'est une mesure du nombre d'instances correctement classées divisé par le nombre total d'instances. Cependant, à partir des données d'entraînement, nous pouvons obtenir une meilleure approximation de l'erreur attendue de notre classificateur lorsque nous utilisons des techniques d'apprentissage d'ensemble ou d'ensachage.
Erreur hors du sac
Pour implémenter oob dans sklearn, vous devez le spécifier lors de la création de votre objet Forêts aléatoires en tant que
Ensuite, nous pouvons former le modèle
Comme prévu, la précision du modèle lors de l'évaluation de l'ensemble d'apprentissage est très élevée. Cependant, cela n'a aucun sens car vous pouvez très bien sur-adapter vos données et donc votre modèle est un déchet. Cependant, nous pouvons utiliser le score hors sac comme
Il s'agit de la précision lors de l'évaluation de nos instances dans l'ensemble de formation en utilisant uniquement les arbres pour lesquels elles ont été omises. Calculons maintenant le score sur l'ensemble de test comme
On voit que la précision mesurée par oob est très similaire à celle obtenue avec l'ensemble de test. Il en résulte donc à travers la théorie que la précision de l'oob est une meilleure métrique pour évaluer les performances de votre modèle plutôt que juste le score. Ceci est une conséquence des modèles d'ensachage et ne peut pas être fait avec d'autres types de classificateurs.
Calcul de l'oob en utilisant différentes métriques
Oui, vous pouvez le faire! Cependant, cela dépend de la structure exacte de votre code. Je ne sais pas comment vous pouvez inclure l'oob et l'AUC tous ensemble avec la
cross_val_score
fonction. Cependant, si vous effectuez manuellement les plis de validation croisée, vous pouvez effectuer les opérations suivantes, l'algorithme des forêts aléatoires dans sklearn vous fournit la fonction de décision de l'oob commeLa classe peut ensuite être obtenue en utilisant
Ensuite, nous pouvons calculer l'AUC en utilisant ce qui suit
la source
RandomForestClassifier
peut retourner un score OOB qui n'est PAS exact, et la deuxième partie de votre réponse fournit une très bonne indication sur la façon d'aborder ce problème. Cependant, je dois souligner qu'il ne faut pas utiliser les étiquettes de classe pour calculer l'ASC de la courbe ROC; les probabilités de classe doivent plutôt être utilisées directement. Donc, la bonne définition seraitpred_train = forest.oob_decision_function_[:, 1]
.