训练高度不平衡数据集的快速指南

数据挖掘 机器学习 分类 数据集 阶级失衡
2021-10-09 21:33:37

我有一个分类问题,训练集中大约有 1000 个正样本和 10000 个负样本。所以这个数据集是相当不平衡的。普通随机森林只是试图将所有测试样本标记为多数类。

这里给出了一些关于子采样和加权随机森林的好答案:用高度偏差的数据集训练 Tree Ensemble 的意义是什么?

除了RF,还有哪些分类方法可以最好地处理这个问题?

4个回答
  • Max Kuhn 在应用预测建模的第 16 章中很好地介绍了这一点。
  • 如链接线程中所述,不平衡数据本质上是一个成本敏感的训练问题。因此,任何对成本敏感的方法都适用于不平衡数据。
  • 有很多这样的方法。并非所有都在 R: C50 中实现,加权 SVM 是选项。助推器。我认为 Rusboost 只能作为 Matlab 代码使用。
  • 我不使用 Weka,但相信它有大量对成本敏感的分类器。
  • 处理不平衡的数据集:评论:Sotiris Kotsiantis、Dimitris Kanellopoulos、Panayiotis Pintelas'
  • 论阶级不平衡问题:郭新健、尹一龙、董彩玲、杨公平、周光彤

在这种情况下,对多数类进行欠采样通常是要走的路。

如果您认为正类的实例太少,则可以执行过采样,例如,从大小为 n 的数据集中采样 5n 个带有替换的实例。

注意事项:

  • 一些方法可能对类分布的变化很敏感,例如对于朴素贝叶斯——它会影响先验概率。
  • 过采样可能导致过拟合

梯度提升在这里也是一个不错的选择。例如,您可以在 sci-kit learn 中使用梯度提升分类器。梯度提升是一种通过基于错误分类示例构建连续训练集来处理类不平衡的原则方法。

除了此处发布的答案之外,如果与负面示例相比,正面示例的数量太少,那么它接近于一个异常检测问题,其中正面示例是异常。

您有一系列检测异常的方法,从使用多元高斯分布对所有点进行建模,然后选择距离均值 2 或 3 个标准差的点。

另一个值得深思的地方——我见过很多人用更多的例子随机抽取负面例子,这样两个类的数量相同。这完全取决于手头的问题,我们是否希望它们保持平衡。