大量失衡数据的机器学习模型建议

4

我有一个分类问题的数据集,总共有50个类别。

 Class1: 10,000 examples 
 Class2: 10 examples
 Class3: 5 examples 
 Class4: 35 examples
 .
 .
 . 
and so on.

我试着用支持向量机(包括线性核和高斯核)来训练分类器。然而,测试数据的准确率很低,分别只有65%和72%。现在我正在考虑使用神经网络。你有没有对于大型不平衡数据集的机器学习模型和算法的建议?这对我来说非常有帮助。

4个回答

3
您应该提供更多关于数据集特征和类别分布的信息,这将有助于他人为您提供建议。 无论如何,我认为神经网络不适合这里,因为数据集太小了。
假设50%或更多的样本属于类别1,那么我首先会寻找一个分类器,它可以区分类别1和非类别1的样本(二元分类)。这个分类器应该优于一个天真的分类器(基准),后者随机选择一个分类,其先验概率对应于训练集的类别分布。 例如,假设有1,000个样本,其中700个属于类别1,那么基准分类器将以700/1,000=0.7的概率将新样本分类为类别1(就像一个不公平的抛硬币)。
一旦您找到一个准确性好的分类器,下一阶段可以是将非类别1分类的样本分类为其他49个类之一,假设这些类更加平衡,那么我会从RF、NB和KNN开始。

1

0

从我的经验来看,处理不平衡类的最成功方法是:

  1. 改变输入数据的分布:20000个样本(您拥有的大约例子数量)并不是很多,因此您可以通过多次使用来自较少频繁类别的每个样本来更改数据集分布。根据类别数量,您可以在训练集中将它们的示例数设置为例如6000或8000个。在这种情况下,请记住不要更改测试和验证集的分布。

  2. 增加训练时间:对于神经网络,当无法更改输入分布时,我强烈建议您尝试学习相当长的时间(例如1000个epochs)。在这种情况下,您必须记住正则化。我通常使用dropoutl2权重正则化器,其参数由随机搜索算法学习。

  3. 减小批量大小:在神经网络的情况下,减小批量大小可能会导致在较不频繁的类别上提高性能。

  4. 更改损失函数:使用MAPE而不是Crossentropy也可以提高较不频繁类别的准确性。

欢迎尝试不同的方法组合,例如随机搜索算法。


0

数据层方法:

欠采样可能会因为移除数据而丢失重要的信息。过度采样可能会导致在训练数据上过拟合,特别是如果少数类的添加副本是现有数据的复制品。已经开发了许多复杂的取样技术来缓解这些风险。

其中一种技术是两阶段学习。您首先在重新采样的数据上对模型进行训练。通过随机地对大类进行欠采样直到每个类只有 N 个实例,就可以获得这些重新采样的数据。然后在原始数据上对模型进行微调。

另一种技术是动态采样:在训练过程中对表现不佳的类进行过度采样,对表现优秀的类进行欠采样。该方法由 Pouyanfar 等人引入,旨在向模型展示它尚未学习的内容。

算法层方法

  1. 成本敏感学习
  2. 平衡分类损失
  3. 焦点损失

参考文献:

  1. 机器学习系统的设计
  2. 类别不平衡深度学习调查

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接