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?
la source
refit=False
puisclf.fit
ne sera pas fait le meilleur classificateur?GridSearchCV vous permet de combiner un estimateur avec un préambule de recherche de grille pour régler les hyper-paramètres. La méthode sélectionne le paramètre optimal à partir de la recherche dans la grille et l'utilise avec l'estimateur sélectionné par l'utilisateur. GridSearchCV hérite des méthodes du classificateur, donc oui, vous pouvez utiliser les méthodes .score, .predict, etc. directement via l'interface GridSearchCV. Si vous souhaitez extraire les meilleurs hyper-paramètres identifiés par la recherche dans la grille, vous pouvez utiliser .best_params_ et cela retournera le meilleur hyper-paramètre. Vous pouvez ensuite transmettre cet hyperparamètre à votre estimateur séparément.
L'utilisation directe de .predict donnera les mêmes résultats que l'obtention du meilleur hyper-paramètre via .best_param_, puis son utilisation dans votre modèle. En comprenant les rouages soulignés de la recherche dans la grille, nous pouvons voir pourquoi c'est le cas.
Recherche dans la grille
Cette technique est utilisée pour trouver les paramètres optimaux à utiliser avec un algorithme. Ce ne sont PAS les poids ou le modèle, ceux-ci sont appris à l'aide des données. C'est évidemment assez déroutant donc je vais faire la distinction entre ces paramètres, en appelant un hyper-paramètres.
Les hyper-paramètres sont comme les k dans k-voisins les plus proches (k-NN). k-NN oblige l'utilisateur à sélectionner le voisin à considérer lors du calcul de la distance. L'algorithme ajuste ensuite un paramètre, un seuil, pour voir si un nouvel exemple correspond à la distribution apprise, cela se fait avec les données.
Comment choisissons-nous k?
Certaines personnes se contentent de recommandations basées sur des études antérieures du type de données. D'autres utilisent la recherche par grille. Cette méthode sera en mesure de déterminer au mieux quel k est optimal à utiliser pour vos données.
Comment ça marche?
Cela va à l'encontre des principes de non utilisation des données de test !!
La valeur d'hyper-paramètre sélectionnée est celle qui atteint les performances moyennes les plus élevées parmi les n-plis. Une fois que vous êtes satisfait de votre algorithme, vous pouvez le tester sur l'ensemble de test. Si vous allez directement à l'ensemble de test, vous risquez de sur-adapter.
la source