问题描述
from imblearn.pipeline import Pipeline
from imblearn.over_sampling import SMOTE
smt = SMOTE(random_state=0)
pipeline_rf_smt_fs = Pipeline(
[
('preprocess',preprocessor),('selector',SelectKBest(mutual_info_classif,k=30)),('smote',smt),('rf_classifier',RandomForestClassifier(n_estimators=600,random_state =2021))
]
)
我收到以下错误:
所有中间步骤都应该是转换器并实现拟合和转换,或者是字符串 'passthrough' 'SMOTE(random_state=0)' (type
我相信 smote 必须使用后期特征选择过程。对此的任何帮助都会非常有帮助。
解决方法
这是 scikit-learn
版本的管道给出的错误消息。您的代码按原样不应产生此错误,但您可能在覆盖 from sklearn.pipeline import Pipeline
对象的地方运行了 Pipeline
。
从方法论的角度来看,我仍然发现在一般设置中进行预处理和特征选择后使用采样器是有问题的。如果您选择的特征由于数据集的不平衡而相关怎么办?我更愿意在管道的第一步中使用它(但这取决于您,它不会导致任何错误)。