Answers:
发生这种情况的原因是,当您进行小批量生产时,小批量生产中根本不会包含阳性样品的可能性很小(考虑到此处的比例)。因此,它将最终学习否定类的模式,经过几个时期,所有内容都被归类为否定类。
有两种可能的方法来处理这种情况。
假设比例为0.3%到99.7%,则这是一个非常偏斜的数据集。每1000个样本中几乎没有3个阳性类别的样本。我要说的是,您应该通过获取更多肯定的类来平衡数据集。去获取尽可能多的阳性样本。然后,您可以使用更加平衡的数据集。例如,您可以获取1000个正样本,然后随机选择1000个负样本来构建分类器。现在,它应该能够学习这两个课程。
迷你批处理后更新权重时,请使用加权误差度量。在任何小批量生产中,权重将与正负样本的数量成比例地更新。现在,在当前比例为3:1000的情况下,即使这个技巧也可能不起作用。因此,您可以尝试通过获取297个以上的正样本并将其与1000个负样本相结合来使比例达到300:1000。然后,使用300:1000的比率,您应该根据每个类别中的样本数量对小批量处理中的误差进行加权。这应该工作。
您为什么要在这里使用CNN?您是否考虑过其他实际处理不平衡数据的模型?
例如,我发现以下两种技术对我来说非常有效:
带SMOTE增强功能的随机森林:使用混合算法SMOTE
,以可调整的百分比对多数类进行低采样,对少数类进行过度采样。根据您的反应变量在训练集中的分布选择这些百分比。将此数据输入您的RF模型。始终交叉验证/执行网格搜索,以找到适合您的RF的最佳参数设置。
带有超参数优化的XGBoost:再次交叉验证或执行网格搜索以找到模型的最佳参数设置。此外,xgboost
您还可以使用来平衡正负类权重scale_pos_weight
。请参阅参数文档以获取完整列表。
我还应该补充一点,我正在处理的数据集具有相同的偏斜百分比,并且能够使用来获得0.941的灵敏度得分和0.71的特异性xgboost
,这意味着该模型可以非常准确地预测真实阳性,并且预示着对我来说很好。
(对不起,我不能发表评论,信誉不足,我真的很想知道您为什么选择CNN)
不平衡数据集是所有领域中的常见问题,并不特别涉及计算机视觉和卷积神经网络(CNN)处理的问题。
要解决此问题,您应该尝试通过过度采样少数类或欠采样多数类(或两者)来平衡数据集。可以说,一个不错的选择是如上所述的SMOTE(综合少数族裔过采样技术)算法。在这里您可以找到不同过采样算法的比较。如果您是Python用户,则不平衡学习是一个不错的库,它实现了许多有用的平衡数据集的技术。
另一方面,如果您要对图像进行分类,则增加数据集大小的一种不错的方法是增加它的大小(即,通过创建合理的合成示例,例如,类似图像,但相对于原始图像旋转/移位很小)。有时您可能会发现增强少数派类别以获得更好的平衡很有用。Keras ImageDataGenerator类是用于此目的的好工具。