1
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 <class 'imblearn.over_sampling._smote.SMOTE'>) 不

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

4

1 回答 1

2

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

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

于 2021-01-11T21:28:00.030 回答