如何对 sklearn 中的不平衡数据集进行交叉验证

EmJ*_*EmJ 5 python classification machine-learning scikit-learn

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

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

clf=RandomForestClassifier(random_state = 42, class_weight="balanced")
Run Code Online (Sandbox Code Playgroud)

然后我使用上面的分类器进行了 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())
Run Code Online (Sandbox Code Playgroud)

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

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

Qui*_*2k1 7

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

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