La classe GridSearchCV est absolument utile dans scikit-learn pour effectuer une recherche sur grille et une validation croisée, mais je ne souhaite pas effectuer de validation croisée. Je veux faire une recherche sur la grille sans validation croisée et utiliser des données entières pour m'entraîner. Pour être plus précis, je dois évaluer mon modèle réalisé par RandomForestClassifier avec "score oob" lors de la recherche sur la grille. Y a-t-il un moyen facile de le faire? ou devrais-je faire un cours par moi-même?
Les points sont
Je déconseillerais vraiment d'utiliser OOB pour évaluer un modèle, mais il est utile de savoir effectuer une recherche sur une grille en dehors de GridSearchCV()
(je le fais souvent afin de pouvoir enregistrer les prédictions de CV de la meilleure grille pour faciliter l'empilement des modèles). Je pense que le moyen le plus simple est de créer votre grille de paramètres via ParameterGrid()
, puis de parcourir en boucle chaque ensemble de paramètres. Par exemple, si vous avez un dict de grille, nommé "grid", et un objet de modèle RF, nommé "rf", vous pouvez alors procéder de la manière suivante:
for g in ParameterGrid(grid):
rf.set_params(**g)
rf.fit(X,y)
# save if best
if rf.oob_score_ > best_score:
best_score = rf.oob_score_
best_grid = g
print "OOB: %0.5f" % best_score
print "Grid:", best_grid
Une méthode consiste à utiliser ParameterGrid
pour créer un itérateur des paramètres de votre choix et le parcourir en boucle.
Une autre chose à faire est de configurer GridSearchCV pour qu’il fasse ce que vous voulez. Je ne recommanderais pas cela beaucoup parce que c'est inutilement compliqué.
Ce qu'il vous faudrait faire, c'est:
cv
dans docs et donnez-lui un générateur qui produit un tuple avec tous les indices (pour que train et test soient identiques)scoring
pour utiliser l'oob attribué à partir de la forêt aléatoire.Voir ce lien: https://stackoverflow.com/a/44682305/2202107
Il a utilisé cv=[(slice(None), slice(None))]
qui n'est PAS recommandé par les auteurs de sklearn.