如何使用GridSearchCV输出进行scikit预测?

2024-05-09 04:40:20 发布

您现在位置:Python中文网/ 问答频道 /正文

在以下代码中:

# 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']

这三者有什么区别?


Tags: gsiristhresholdmodelparamsfsmaxfeature
1条回答
网友
1楼 · 发布于 2024-05-09 04:40:20

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)

相关问题 更多 >