使用Scikit-learn的管道和带有自定义转换器的GridSearchCV预测测试数据

时间:2019-07-16 12:00:35

标签: scikit-learn

我正在尝试将GridSearchCV与管道结合起来。代码如下:

pipe = Pipeline(steps=[('preprocessing', preprocess), 
                       ('feature_selection', feature_selector), 
                       ('sampling', sampler), 
                       ('model', RandomForestClassifier())])
search = GridSearchCV(pipe, hparam_grid[model_name], 
                      cv=cross_validator, 
                      n_jobs=-1, scoring=scoring, refit='balanced_accuracy')

这里preprocess是来自TransformerMixin的自定义转换器,它具有fittransform方法。您可以想到它具有自定义的StandardScaler方法。

一切似乎都正常运行。但是现在当我想将拟合的管道应用于测试数据集时遇到一些问题。如果我调用search.predict(X_test),则由于功能数量不同而无法正常工作(feature_selection步骤可能会删除一些列)。我不能简单地调用search.transform(X_test),因为RandomForestClassifier没有这种方法。

是否有一种方法可以将拟合的管道应用于测试数据而无需分步进行(例如X_test_processed = search.best_estimator_[0].transform(X_test),...)?是否可以在我的自定义转换器中添加predict方法?

0 个答案:

没有答案