【问题标题】:How to perform cross validation for imbalanced datasets in sklearn如何在 sklearn 中对不平衡数据集执行交叉验证
【发布时间】:2019-08-21 11:14:25
【问题描述】:

我有一个高度不平衡的数据集,我想执行二进制分类。

在阅读一些帖子时,我发现sklearn 为不平衡的数据集提供了class_weight="balanced"。所以,我的分类器代码如下。

clf=RandomForestClassifier(random_state = 42, class_weight="balanced")

然后我使用上面的分类器进行了 10 折交叉验证,如下所示。

k_fold = KFold(n_splits=10, shuffle=True, random_state=42)
new_scores = cross_val_score(clf, X, y, cv=k_fold, n_jobs=1)
print(new_scores.mean())

但是,我不确定class_weight="balanced" 是否通过 10 倍交叉验证得到反映。我做错了吗?如果是这样,在 sklearn 中是否有更好的方法?

如果需要,我很乐意提供更多详细信息。

【问题讨论】:

  • 有多种方法可以平衡您的数据集(例如,替换或随机子采样),最好的方法取决于数据的性质以及您想要实现的目标。您可以查看this package,它提供了广泛的选择。
  • 警告:您应该明智地为您的分类器选择性能度量。您可能想了解何时使用 which at learnerworld.tumblr.com/search/performance+measures 特别对于倾斜数据,首选 F1 分数等分数。

标签: python machine-learning scikit-learn classification


【解决方案1】:

您可能希望使用分层交叉验证,而不是一般的交叉验证。更具体地说,您可以使用StratifiedKFold。 而不是代码中的KFold

这可确保所有潜在的训练和测试拆分都能捕捉到类不平衡。

【讨论】:

  • 您好,谢谢您的回答,如果我使用StratifiedKFold,那么我是否也应该使用class_weight="balanced"?期待您的来信:)
  • 是的,因为拆分仍然不平衡,但类标签的分布几乎相同。
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 2021-10-08
  • 2020-03-18
  • 2018-07-26
  • 2014-01-09
  • 2019-08-30
  • 2013-12-13
  • 2018-11-15
相关资源
最近更新 更多