我有一个高度不平衡的数据集,我想进行二元分类。
在阅读了一些帖子后,我发现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中实现这一点?
如果需要,我很乐意提供更多细节。
回答:
你可能想要使用分层交叉验证,而不是一般的交叉验证。更具体地说,你可以使用StratifiedKFold
来代替代码中的KFold
。
这确保了所有可能的训练和测试分割都能捕捉到类不平衡的情况。