如何使用 DecisionTreeClassifier 来平衡分类?

How to balance classification using DecisionTreeClassifier?

我有一个数据集,其中 classes 是不平衡的。 class 是 012

如何计算每个 class 的预测误差,然后在 scikit-learn 中相应地重新平衡 weights

如果您想完全平衡(将每个 class 视为同等重要),您可以简单地传递 class_weight='balanced',如 docs:

中所述

The “balanced” mode uses the values of y to automatically adjust weights inversely proportional to class frequencies in the input data as n_samples / (n_classes * np.bincount(y))

如果classA的频率是10%,classB的频率是90%,那么classB就会成为主导class并且你的决策树将变得偏向占主导地位的 classes

这种情况下,可以给模型传一个dic{A:9,B:1}来指定每个class的权重,比如

clf = tree.DecisionTreeClassifier(class_weight={A:9,B:1})

class_weight='balanced'也可以,只是根据每个class个频率的比例自动调整权重

我用了class_weight='balanced'后,每个class的记录数都变成一样了(88923左右)