训练不稳定,班级极度不平衡

数据挖掘 分类 scikit-学习 阶级失衡
2022-03-03 12:44:36

我正在处理大约 30 个类别的多类分类问题。

这个问题有严重的类不平衡:

  • 最不常见的类大约有 300 个示例。
  • 最常见的类大约有 100k 个示例。

我不希望分类模型是虚拟的并预测大多数示例中最常见的类,因此,我class_weight='balanced'在我LogisticRegression的 from sklearn 中使用。但是,在这种情况下,算法预测的类大多是频率较低的类。我理解模型以某种方式过度拟合它们,因为它为这些类中的每个样本分配了非常高的权重。

另一方面,如果我不应用类别权重,模型会预测最常见的类别。

有没有办法解决这个问题?有没有办法确保模型预测每个类别的样本比例大致相同?

1个回答

可能有许多不同的策略,但当不平衡如此严重时,这是一个难题。

正如您所注意到的,如果没有任何校正,模型可能会忽略最小的类。然而,如果数据是平衡的,强制分类权重肯定是一种过于强烈的修正。中间立场是在拟合模型之前自己重新采样训练集实例:通过尝试不同的方法对大类进行欠采样和/或对小类进行过采样,您应该能够在两个极端之间找到最佳权衡(使用单独的验证集以确定最佳组合)。

有没有办法确保模型预测每个类别的样本比例大致相同?

也许我误解了,但这看起来是个坏主意:如果真实比例不相等,那么模型也不应该预测相等的比例。理想的场景是模型每次都预测正确的标签,这意味着预测每个类别的真实比例。

在更简单的配置中分析性能也可能很有用,例如通过选择一些“平均大小”类并观察分类器仅在它们之间进行区分的程度。分类器越难正确预测,它越依赖于基本的类比例,因为它不知道更好。