web-dev-qa-db-fra.com

GridSearchCV effectue-t-il une validation croisée?

Je travaille actuellement sur un problème qui compare les performances de trois algorithmes d'apprentissage machine différents sur le même ensemble de données. J'ai divisé l'ensemble de données en 70/30 ensembles de formation/test, puis j'ai effectué une recherche dans la grille pour les meilleurs paramètres de chaque algorithme à l'aide de GridSearchCV et X_train, y_train.

Première question, suis-je supposé effectuer une recherche de grille sur l'ensemble de formation ou est-il supposé être sur l'ensemble de données?

Deuxième question, je sais que GridSearchCV utilise K-fold dans son implémentation, cela signifie-t-il que j'ai effectué une validation croisée si j'utilisais le même X_train, y_train pour les trois algorithmes que je compare dans le GridSearchCV?

Toute réponse serait appréciée, merci.

16
kevinH

Tous les estimateurs dans scikit où le nom se termine par CV effectuent une validation croisée. Mais vous devez conserver un ensemble de tests séparé pour mesurer les performances.

Vous devez donc diviser toutes vos données pour vous entraîner et tester. Oubliez ces données de test pendant un certain temps.

Et puis passez ces données de train uniquement à la recherche de grille. GridSearch divisera davantage ces données de train en train et testera pour régler les hyper-paramètres qui lui sont transmis. Et enfin ajuster le modèle sur l'ensemble des données du train avec les meilleurs paramètres trouvés.

Vous devez maintenant tester ce modèle sur les données de test que vous avez mises de côté au début. Cela vous donnera les performances quasi réelles du modèle.

Si vous utilisez toutes les données dans GridSearchCV, il y aurait une fuite de données de test dans le réglage des paramètres et le modèle final pourrait ne pas fonctionner aussi bien sur des données invisibles plus récentes.

Vous pouvez consulter mes autres réponses qui décrivent la GridSearch plus en détail:

32
Vivek Kumar

Oui, GridSearchCV effectue une validation croisée. Si je comprends bien le concept - vous voulez garder une partie de votre ensemble de données invisible pour le modèle afin de le tester.

Ainsi, vous entraînez vos modèles par rapport à un ensemble de données de train et les testez sur un ensemble de données de test.

Ici, je faisais presque la même chose - vous voudrez peut-être le vérifier ...

7
MaxU