如何通过卷积神经网络(CNN)对不平衡数据集进行分类?


10

我在二元分类任务中有一个不平衡的数据集,其中正数与负数的比例为0.3%对99.7%。正面和负面之间的差距是巨大的。当我用MNIST问题中使用的结构训练CNN时,测试结果显示出较高的假阴性率。同样,训练误差曲线在开始的几个时期中迅速下降,但在随后的时期中保持相同的值。

您能建议我一种解决此问题的方法吗?谢谢!

Answers:


10

发生这种情况的原因是,当您进行小批量生产时,小批量生产中根本不会包含阳性样品的可能性很小(考虑到此处的比例)。因此,它将最终学习否定类的模式,经过几个时期,所有内容都被归类为否定类。

有两种可能的方法来处理这种情况。

  1. 假设比例为0.3%到99.7%,则这是一个非常偏斜的数据集。每1000个样本中几乎没有3个阳性类别的样本。我要说的是,您应该通过获取更多肯定的类来平衡数据集。去获取尽可能多的阳性样本。然后,您可以使用更加平衡的数据集。例如,您可以获取1000个正样本,然后随机选择1000个负样本来构建分类器。现在,它应该能够学习这两个课程。

  2. 迷你批处理后更新权重时,请使用加权误差度量。在任何小批量生产中,权重将与正负样本的数量成比例地更新。现在,在当前比例为3:1000的情况下,即使这个技巧也可能不起作用。因此,您可以尝试通过获取297个以上的正样本并将其与1000个负样本相结合来使比例达到300:1000。然后,使用300:1000的比率,您应该根据每个类别中的样本数量对小批量处理中的误差进行加权。这应该工作。


您知道最佳比例是多少吗?是3:10,还是其他?
donlan '16

4

您为什么要在这里使用CNN?您是否考虑过其他实际处理不平衡数据的模型?

例如,我发现以下两种技术对我来说非常有效:

  • 带SMOTE增强功能的随机森林:使用混合算法SMOTE,以可调整的百分比对多数类进行低采样,对少数类进行过度采样。根据您的反应变量在训练集中的分布选择这些百分比。将此数据输入您的RF模型。始终交叉验证/执行网格搜索,以找到适合您的RF的最佳参数设置。

  • 带有超参数优化的XGBoost:再次交叉验证或执行网格搜索以找到模型的最佳参数设置。此外,xgboost您还可以使用来平衡正负类权重scale_pos_weight。请参阅参数文档以获取完整列表。

我还应该补充一点,我正在处理的数据集具有相同的偏斜百分比,并且能够使用来获得0.941的灵敏度得分和0.71的特异性xgboost,这意味着该模型可以非常准确地预测真实阳性,并且预示着对我来说很好。

(对不起,我不能发表评论,信誉不足,我真的很想知道您为什么选择CNN)


1

不平衡数据集是所有领域中的常见问题,并不特别涉及计算机视觉和卷积神经网络(CNN)处理的问题。

要解决此问题,您应该尝试通过过度采样少数类或欠采样多数类(或两者)来平衡数据集。可以说,一个不错的选择是如上所述的SMOTE(综合少数族裔过采样技术)算法。在这里您可以找到不同过采样算法的比较。如果您是Python用户,则不平衡学习是一个不错的库,它实现了许多有用的平衡数据集的技术。

另一方面,如果您要对图像进行分类,则增加数据集大小的一种不错的方法是增加它的大小(即,通过创建合理的合成示例,例如,类似图像,但相对于原始图像旋转/移位很小)。有时您可能会发现增强少数派类别以获得更好的平衡很有用。Keras ImageDataGenerator类是用于此目的的好工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.