如何在 sklearn 管道中一起使用 SMOTE 和特征选择?

how to use SMOTE & feature selection together in sklearn pipeline?

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)'(类型 )不

我相信 smote 必须使用 post 特征选择过程。对此的任何帮助都会非常有帮助。

这是scikit-learn的管道版本给出的错误信息。按原样,您的代码不应产生此错误,但您可能在某处 运行 from sklearn.pipeline import Pipeline 覆盖了 Pipeline 对象。

从方法论的角度来看,我仍然发现在一般设置中预处理和特征 selection 之后使用采样器是有问题的。如果你 select 的特征因为你的数据集不平衡而相关怎么办?我更喜欢在管道的第一步使用它(但这取决于你,它不应该导致任何错误)。