如何在 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 的特征因为你的数据集不平衡而相关怎么办?我更喜欢在管道的第一步使用它(但这取决于你,它不应该导致任何错误)。
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 的特征因为你的数据集不平衡而相关怎么办?我更喜欢在管道的第一步使用它(但这取决于你,它不应该导致任何错误)。