我正在尝试将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
的自定义转换器,它具有fit
和transform
方法。您可以想到它具有自定义的StandardScaler
方法。
一切似乎都正常运行。但是现在当我想将拟合的管道应用于测试数据集时遇到一些问题。如果我调用search.predict(X_test)
,则由于功能数量不同而无法正常工作(feature_selection
步骤可能会删除一些列)。我不能简单地调用search.transform(X_test)
,因为RandomForestClassifier
没有这种方法。
是否有一种方法可以将拟合的管道应用于测试数据而无需分步进行(例如X_test_processed = search.best_estimator_[0].transform(X_test)
,...)?是否可以在我的自定义转换器中添加predict
方法?