scikit-learn 的 DecisionTreeClassifier 上的 class_weight='balanced' 是否可以解释为少数类具有相同的重复数据点?
我知道那行不通,class_weight 是错误分类成本。但我想了解它是否会给出与过采样少数类相同的结果。
scikit-learn 的 DecisionTreeClassifier 上的 class_weight='balanced' 是否可以解释为少数类具有相同的重复数据点?
我知道那行不通,class_weight 是错误分类成本。但我想了解它是否会给出与过采样少数类相同的结果。
从 sklearn 的文档中,
“平衡”模式使用 y 的值自动调整权重,与输入数据中的类频率成反比,如 n_samples / (n_classes * np.bincount(y))
它对少数类的错误分类权重比多数类更大。该方法与重采样无关;它改为修改错误分类成本矩阵。
改变每个类的错误分类成本是一种不同于重采样方法的方法。在我看来,它不会给出与对少数类进行过采样完全相同的结果。话虽如此,这两种方法都有助于处理不平衡(或不平衡)的数据分类
是的,这些应该是相同的,当上采样导致每个样本的重复数量相同时(前提是您仅在训练集中正确地进行了上采样)。这个想法是,节点处的杂质/损失是通过类权重或重复样本数量的乘数计算的,并且这些是相同的(当权重是合理的并且进行上采样以匹配这些比率时; 否则,将在随机子样本上进行上采样,这将与加权略有不同)。
这是一个笔记本(github/colab),它显示生成的模型是相同的,至少在一个小型玩具示例中是相同的。(请注意,一开始我也复制了一些多数类,因此不平衡比率是整数,我可以很好地将少数类上采样到相等的大小。)