如何在 sklearn 中对不平衡数据集执行交叉验证
Posted
技术标签:
【中文标题】如何在 sklearn 中对不平衡数据集执行交叉验证【英文标题】:How to perform cross validation for imbalanced datasets in 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 分数等分数。 【参考方案1】:您可能希望使用分层交叉验证,而不是一般的交叉验证。更具体地说,您可以使用StratifiedKFold
。
而不是代码中的KFold
。
这可确保所有潜在的训练和测试拆分都能捕捉到类不平衡。
【讨论】:
您好,谢谢您的回答,如果我使用StratifiedKFold
,那么我是否也应该使用class_weight="balanced"
?期待您的来信:)
是的,因为拆分仍然不平衡,但类标签的分布几乎相同。以上是关于如何在 sklearn 中对不平衡数据集执行交叉验证的主要内容,如果未能解决你的问题,请参考以下文章
如何在交叉验证和 GridSearchCV 中实现 SMOTE