2016-02-14 1 views
3

Dans le code suivant:Comment utiliser la sortie GridSearchCV pour une prédiction scikit?

# Load dataset 
iris = datasets.load_iris() 
X, y = iris.data, iris.target 

rf_feature_imp = RandomForestClassifier(100) 
feat_selection = SelectFromModel(rf_feature_imp, threshold=0.5) 

clf = RandomForestClassifier(5000) 

model = Pipeline([ 
      ('fs', feat_selection), 
      ('clf', clf), 
     ]) 

params = { 
    'fs__threshold': [0.5, 0.3, 0.7], 
    'fs__estimator__max_features': ['auto', 'sqrt', 'log2'], 
    'clf__max_features': ['auto', 'sqrt', 'log2'], 
} 

gs = GridSearchCV(model, params, ...) 
gs.fit(X,y) 

Ce qui devrait être utilisé pour une prédiction?

  • gs?
  • gs.best_estimator_? ou
  • gs.best_estimator_.named_steps['clf']?

Quelle est la différence entre ces 3?

Répondre

6

gs.predict(X_test) est équivalent à gs.best_estimator_.predict(X_test). En utilisant l'un ou l'autre, X_test sera passé à travers votre pipeline entier et il retournera les prédictions.

gs.best_estimator_.named_steps['clf'].predict(), mais n'est que la dernière phase du pipeline. Pour l'utiliser, l'étape de sélection des fonctionnalités doit déjà avoir été effectuée. Cela ne fonctionnera que si vous avez déjà exécuté vos données via gs.best_estimator_.named_steps['fs'].transform()

Trois méthodes équivalentes pour générer des prédictions sont présentées ci-dessous:

En utilisant gs directement.

pred = gs.predict(X_test) 

En utilisant best_estimator_.

pred = gs.best_estimator_.predict(X_test) 

Appel de chaque étape dans le pipeline individuel.

X_test_fs = gs.best_estimator_.named_steps['fs'].transform(X_test) 
pred = gs.best_estimator_.named_steps['clf'].predict(X_test_fs) 
+0

merci encore @David Maust, c'est super utile – user308827