2016-03-23 1 views
0

Dans cet exemple simplifié, j'entraîne une régression logistique avec GridSearchCV. Comme toujours, je veux que le modèle se généralise bien, donc je veux regarder de près les résultats du test . Je ne peux pas trouver un moyen facile de le faire en utilisant GridSearchCV.Scikit: Existe-t-il un moyen de récupérer tous les éléments non formés (l'ensemble de test) à partir du meilleur estimateur lors de l'utilisation de GridSearchCV?

lr_pipeline = Pipeline([('clf', LogisticRegression())]) 
lr_parameters = {'clf__fit_intercept':[True,False]} 

lr_gs = GridSearchCV(lr_pipeline, lr_parameters) 
lr_gs = lr_gs.fit(X,y) 
lr_gs.best_estimator_.test_set # would like to be able to do something like this 

Je veux analyser davantage les exemples que le modèle n'a pas formé sur (par exemple la vue. Leur matrice de confusion), mais depuis la validation croisée est passé de manière transparente, je ne peux pas choisir ces exemples. Je pourrais faire un nouveau train-test-split et me recycler, mais cela me semble inutile.

Répondre

1

Le problème avec ceci est que lorsque vous instanciez un objet GridSearchCV, il a un paramètre par défaut appelé refit=True. Selon les docs (http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html#sklearn.grid_search.GridSearchCV), ce paramètre signifie que le modèle est automatiquement recyclé sur l'ensemble de votre ensemble de données (X, comme vous l'avez défini ici). Donc, par définition, le modèle s'entraîne sur toutes les données, et il n'y a pas de données de test bloquées.

Si vous souhaitez obtenir des données de test détenus sur mais toujours à utiliser GridSearchCV, ce que vous pouvez faire est de créer d'abord une fraction de train test (http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html#sklearn.cross_validation.train_test_split), puis appelez GridSearchCV sur la partie du train de votre séparation. Ensuite, vous pouvez comparer les résultats des tests entre différents types de recherches (comme RandomSearchCV, etc.) ou différents types de paramètres.

0

Il est un peu difficile d'interpréter votre formulation. Mais je soupçonne que ce que vous voulez est d'inspecter, pour les meilleurs paramètres, les prédictions de chaque modèle ajusté sur une partie des données d'entraînement sous validation croisée sur les parties d'essai correspondantes. Que ce soit bon ou mauvais, l'implémentation GridSearchCV ignore les modèles ajustés, ainsi que les résultats des tests utilisés pour le marquer (bien que vous puissiez envelopper votre estimateur dans une classe qui le fait si vous le voulez vraiment). Cependant, il existe un utilitaire permettant d'obtenir des prédictions d'ensemble de tests pour tous les ensembles de tests en attente de validation croisée: cross_val_predict. Encore une fois, s'il n'y a pas de mémo, cela entraînera un gaspillage des modèles. Notez également que cela renverra une prédiction pour chaque instance dans X sous l'hypothèse que les ensembles de tests de validation croisée étaient une partition de X.

Vous pouvez simplement utiliser cross_val_predict(lr_gs.best_estimator_, X, y, cv=lr_gs.cv, n_jobs=lr_gs.n_jobs)