sklearn 的 DecisionTreeClassifier 上的 class_weight

数据挖掘 分类 scikit-学习 决策树 多类分类 阶级失衡
2022-02-12 19:48:32

scikit-learn 的 DecisionTreeClassifier 上的 class_weight='balanced' 是否可以解释为少数类具有相同的重复数据点?

我知道那行不通,class_weight 是错误分类成本。但我想了解它是否会给出与过采样少数类相同的结果。

2个回答

从 sklearn 的文档中,

“平衡”模式使用 y 的值自动调整权重,与输入数据中的类频率成反比,如 n_samples / (n_classes * np.bincount(y))

它对少数类的错误分类权重比多数类更大。该方法与重采样无关;它改为修改错误分类成本矩阵。

改变每个类的错误分类成本是一种不同于重采样方法的方法。在我看来,它不会给出与对少数类进行过采样完全相同的结果。话虽如此,这两种方法都有助于处理不平衡(或不平衡)的数据分类

是的,这些应该是相同的,当上采样导致每个样本的重复数量相同时(前提是您仅在训练集中正确地进行了上采样)。这个想法是,节点处的杂质/损失是通过类权重或重复样本数量的乘数计算的,并且这些是相同的(当权重是合理的并且进行上采样以匹配这些比率时; 否则,将在随机子样本上进行上采样,这与加权略有不同)。

这是一个笔记本(github/colab),它显示生成的模型是相同的,至少在一个小型玩具示例中是相同的。(请注意,一开始我也复制了一些多数类,因此不平衡比率是整数,我可以很好地将少数类上采样到相等的大小。)