【发布时间】:2018-12-31 00:32:45
【问题描述】:
我正在处理二进制分类问题中非常不平衡的数据集 (~5%)。我正在使用 SMOTE 和一个随机森林分类器来让我的过采样发生在 GridSearch CV 循环中(如建议的here)。你可以在下面看到我的实现:
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import RandomForestClassifier
from imblearn.pipeline import Pipeline
from sklearn.model_selection import RandomizedSearchCV, StratifiedKFold
sm = SMOTE()
rf = RandomForestClassifier()
pipeline = Pipeline([('sm', sm), ('rf', rf)])
kf = StratifiedKFold(n_splits = 5)
params = {'rf__max_depth' : list(range(2,5)),
'rf__max_features' : ['auto','sqrt'],
'rf__bootstrap' : [True, False]
}
grid = RandomizedSearchCV(pipeline, param_distributions = params, scoring = 'f1', cv = kf)
grid.fit(X, y)
但是,this paper(参见第 7 页的表 4)建议测试不同的重采样率,以确定哪一个具有更好的性能。现在,我的 sm = SMOTE() 正在生成一个 50-50% 的数据集,但我想遍历一个潜在比率列表(例如 5-95、10-90、等等。)。但是,SMOTE 中的 ratio 参数不接受所需的百分比,而是带有样本数量的特定整数,由于我的 kfold CV (每个折叠可能具有稍微不同的样本大小)。如何实现?
【问题讨论】:
标签: python scikit-learn cross-validation