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 需要转换器实现fit
和transform
方法,但SMOTE
不实现transform
。
【讨论】:
以上是关于SMOTE 函数在 make_pipeline 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 scikit-learn 中使用 make_pipeline 时出现“管道的最后一步”错误?
如何通过 make_pipeline() 标准化训练和测试数据集