如何使用 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个有什么区别?

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)

如果将True传递给GridSearchCV参数refit值(无论如何这是默认值(,则具有最佳参数的估计器将重新处理整个数据集,因此您可以使用gs.fit(X_test)进行预测。如果在训练集上拟合GridSearchCV对象时,refit的值等于 False,那么对于预测,您只有一个选项使用 gs.best_estimator_.predict(X_test)

相关内容

  • 没有找到相关文章

最新更新