不同类别的不平衡训练数据

数据挖掘 神经网络 图像分类 图像识别 卷积神经网络
2021-10-10 00:33:09

如果一个标签有更多的训练数据,我在尝试开发用于图像分类的 CNN 时需要采取哪些预防措施。例如:

label1 : 1000 images
label2 : 100 images
label3 : 100 images
label4 : 100 images

以后数字会变大,但比例可能会保持不变。

感谢您的洞察力。

3个回答

您面临的问题通常被称为类不平衡,并且已成为大量研究的主题。如果您有兴趣,这里有一篇文献综述:He, H., & Garcia, EA (2008)。从不平衡的数据中学习

特别是,您可能会遇到两种形式的不平衡:

当您拥有来自某些类的大量数据时,就会发生绝对不平衡/稀有性,但您只有一些其他类(或类的子概念)的示例。在这种情况下,问题在于学习算法可能没有足够的数据来学习少数类。在您给出的示例中,有 100 个少数类示例,具体取决于数据的性质,您可能会遇到此问题。但是,如果您希望将来有更多数据,那么绝对稀有性最终应该不再是问题。

另一方面,相对不平衡不会随着更多数据而消失。当某些类的先验概率远大于其他类的先验概率时,您就会出现相对不平衡。例如,第 1 类的示例总是比第 2 类的示例多 10 倍,因为第 1 类的出现频率是第 1 类的 10 倍。

大多数用于分类的学习算法都针对准确性进行了优化,或者类似 RMSE。这意味着,当解决真正的分类问题足够困难,并且数据严重不平衡到一个类别时,模型可能会在有疑问时诉诸于预测多数类别。多数人的召回率可能很好,但少数人的召回率则不然。

在少数类别的检测特别重要的许多领域中,这成为一个问题。例如,在医学诊断中,我们可能愿意牺牲整体准确性(因为更多的误报)以获得更好的真阳性率。

简而言之,这取决于您的域您是否可以优化整体准确性,还是更重要的是在各个类别中具有可比的性能?如果您选择后者,那么您可以尝试以下几种方法:

  • 使用对成本敏感的学习:某些学习算法和实现允许您为每个类分配一个成本,本质上是描述如果该类的一个示例被错误分类的情况有多糟糕。如果我没记错的话,当您对这些不同的成本有很好的了解时,这通常被认为是最好的方法。
  • 重新平衡类:您可以对少数类进行过采样(存在过度拟合的风险),对多数类进行欠采样(如果您没有大量数据,这会很危险),混合使用两者或更多像合成采样一样先进(尝试使用 SMOTE 生成少数类的新示例)

总体而言,您还应该小心选择正确的评估指标。使用准确性评估您的模型可能会让您相信您的模型表现非常好,而实际上它正在将所有内容分类到多数类别中。您可以使用许多指标,每个指标都有其优点和缺点。ROC 曲线下面积 (AUC) 是一个常用指标,可让您大致了解模型在不同类别错误分类成本上的平均性能。如果您可以绘制多个模型的 ROC 曲线,并注意到一条曲线在整个绘图宽度上占主导地位,那么这就是您获胜的最明显迹象。如果您有兴趣,在《不平衡学习:基础、算法和应用》一书中有一整章关于这个主题.

您可以复制图像并添加它们。您可以对图像较少的标签使用数据增强技术。以下代码适用于 Keras。

datagen = ImageDataGenerator(
  rotation_range=40,
  width_shift_range=0.2,
  height_shift_range=0.2,
  shear_range=0.2,
  zoom_range=0.2,
  horizontal_flip=True,
  fill_mode='nearest')

我希望这有帮助。你不应该担心一个标签有更多的数据,而应该考虑如何增加其他标签的数据。

您使用的数据集包含几乎超过 90% 的属于一个类的训练数据,并且会极大地影响您的结果。这种数据的不平衡应该会产生我们所说的倾斜类偏斜类的存在会影响你的预测,学习模型可能会成为预测多数类的模型。

为了克服这个问题,您可以执行以下操作:

  • 采样:对数据集进行上采样或下采样,以确保数据的平等表示。
  • 丢弃多余的数据:如果其他类中的数据足够,只需丢弃支配类中的一些数据。
  • 加权:某些训练算法采用权重来强调类,并且在偏斜类中可能会有所帮助。

这个答案基于这篇文章请参阅它以获取详细说明。