2016-02-14 2 views
3

В следующем коде:Как использовать вывод GridSearchCV для предсказания 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) 

Что следует использовать для предсказания?

  • gs?
  • gs.best_estimator_? или
  • gs.best_estimator_.named_steps['clf']?

В чем разница между этими 3?

ответ

6

gs.predict(X_test) равнозначно gs.best_estimator_.predict(X_test). Используя либо, X_test будет передан через весь ваш конвейер, и он вернет прогнозы.

gs.best_estimator_.named_steps['clf'].predict(), однако это только последняя фаза трубопровода. Чтобы использовать его, шаг выбора функции должен быть уже выполнен. Это будет работать только если вы ранее запускать данные через gs.best_estimator_.named_steps['fs'].transform()

Три эквивалентных методов генерации предсказания приведены ниже:

Использование gs непосредственно.

pred = gs.predict(X_test) 

Использование best_estimator_.

pred = gs.best_estimator_.predict(X_test) 

Вызов каждого шага в трубопроводе индивидуально.

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

еще раз спасибо @ Давид Мауст, это очень полезно – user308827

Смежные вопросы