我有一个高度不平衡的数据集,我想执行一个二进制分类。
阅读一些帖子时,我发现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/