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

阅读一些帖子时,我发现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倍交叉验证得到反射(reflect)。我做错了吗?如果是这样,在sklearn中还有更好的方法吗?

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

最佳答案

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

这样可以确保所有潜在的训练和测试拆分都能捕获类(class)不平衡。

关于python - 如何在sklearn中对不平衡数据集执行交叉验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55435619/

10-12 22:07