SMOTE 函数在 make_pipeline 中不起作用

Posted

技术标签:

【中文标题】SMOTE 函数在 make_pipeline 中不起作用【英文标题】:SMOTE function not working in make_pipeline 【发布时间】:2020-03-08 12:56:18 【问题描述】:

我想同时应用交叉验证和过采样。 我从这段代码中得到以下错误:

from sklearn.pipeline import Pipeline, make_pipeline
imba_pipeline = make_pipeline(SMOTE(random_state=42), 
                              LogisticRegression(C=3.4))
cross_val_score(imba_pipeline, X_train_tf, y_train, scoring='f1-weighted', cv=kf)

所有中间步骤应该是转换器并实现拟合和转换,或者是字符串 'passthrough' 'SMOTE(k_neighbors=5, kind='deprecated', m_neighbors='deprecated', n_jobs=1, out_step='弃用', random_state=42, ratio=None, sampling_strategy='auto', svm_estimator='deprecated')' (type ) 没有

附言。我使用imblearn.over_sampling.RandomOverSampler 而不是SMOTE 得到同样的错误。

【问题讨论】:

【参考方案1】:

您应该从imblearn.pipeline 导入make_pipeline 而不是从sklearn.pipeline 导入:make_pipeline from sklearn 需要转换器实现fittransform 方法,但SMOTE 不实现transform

【讨论】:

以上是关于SMOTE 函数在 make_pipeline 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

SMOTE 函数'下标脱离键'

非平衡数据的处理(SMOTE算法)

为啥在 scikit-learn 中使用 make_pipeline 时出现“管道的最后一步”错误?

如何通过 make_pipeline() 标准化训练和测试数据集

如何在 python 的 sklearn 中使用交叉验证执行 SMOTE

如何使用 SMOTE 将合成数据集保存在 CSV 文件中