Je travaille actuellement avec Python et Scikit learn à des fins de classification, et en lisant autour de GridSearch, j'ai pensé que c'était un excellent moyen d'optimiser mes paramètres d'estimateur pour obtenir les meilleurs résultats.
Ma méthodologie est la suivante:
- Divisez mes données en formation / test.
- Utilisez GridSearch avec la validation 5Fold Cross pour former et tester mes estimateurs (Random Forest, Gradient Boost, SVC entre autres) pour obtenir les meilleurs estimateurs avec la combinaison optimale d'hyper paramètres.
- Je calcule ensuite des métriques sur chacun de mes estimateurs tels que Precision, Recall, FMeasure et Matthews Correlation Coefficient, en utilisant mon ensemble de tests pour prédire les classifications et les comparer aux étiquettes de classe réelles.
C'est à ce stade que je vois un comportement étrange et je ne sais pas comment procéder. Dois-je prendre le .best_estimator_ de GridSearch et l'utiliser comme sortie «optimale» de la recherche dans la grille , et effectuer une prédiction à l'aide de cet estimateur? Si je fais cela, je trouve que les métriques de l'étape 3 sont généralement beaucoup plus faibles que si je m'entraîne simplement sur toutes les données d'entraînement et teste sur l'ensemble de test. Ou, est-ce que je prends simplement l'objet GridSearchCV de sortie comme nouvel estimateur ? Si je fais cela, j'obtiens de meilleurs scores pour mes métriques de stade 3, mais cela semble étrange d'utiliser un objet GridSearchCV au lieu du classificateur prévu (par exemple une forêt aléatoire) ...
EDIT: Ma question est donc quelle est la différence entre l'objet GridSearchCV retourné et l'attribut .best_estimator_? Laquelle de celles-ci dois-je utiliser pour calculer d'autres mesures? Puis-je utiliser cette sortie comme un classificateur ordinaire (par exemple en utilisant Predict), ou bien comment dois-je l'utiliser?
refit=False
puisclf.fit
ne sera pas fait le meilleur classificateur?