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
xi
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
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Ensuite, nous pouvons former le modèle
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Résultat: 0,979921928817
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
print(forest.oob_score_)
0,86453272101
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
print('Score: ', forest.score(X_test, y_test))
Résultat: 0,86517733935
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 comme
print(forest.oob_decision_function_)
La classe peut ensuite être obtenue en utilisant
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Ensuite, nous pouvons calculer l'AUC en utilisant ce qui suit
metrics.roc_auc_score(y_train, pred_train)
0,86217157846471204