我正在尝试构建一个多标签分类器来预测某些输入数据为 0 或 1 的概率。我正在使用神经网络和 Tensorflow + Keras(稍后可能是 CNN)。
问题如下:
数据存在很大偏差。负面例子比正面例子多得多,大概是90:10。所以我的神经网络几乎总是输出非常低的正面例子概率。在大多数情况下,使用二进制数它会预测 0。
几乎所有类别的性能都 > 95%,但这是因为它几乎总是预测为零......
因此,假阴性的数量非常高。
一些建议如何解决这个问题?
以下是我到目前为止考虑的想法:
使用定制的损失函数更多地惩罚假阴性(我的第一次尝试失败了)。与类相似,类中正面例子的权重多于负面例子。这类似于班级权重,但在一个班级内。
您将如何在 Keras 中实现这一点?
通过克隆正例来对正例进行过采样,然后过度拟合神经网络,以使正例和负例达到平衡。
提前致谢!
你走在正确的轨道上。
通常,您可以在训练之前平衡数据集,即减少代表性过高的类别,或者为代表性不足的类别生成人工(增强)数据以提高其出现率。
减少人数过多的班级
这个更简单,您只需随机选择代表性不足的类中尽可能多的样本,丢弃其余的并使用新的子集进行训练。当然,缺点是您会失去一些学习潜力,具体取决于您的任务的复杂程度(有多少功能)。
增强数据
根据您正在使用的数据类型,您可以“增强”数据。这仅意味着您从数据中获取现有样本并稍微修改它们并将它们用作附加样本。这对于图像数据、声音数据非常有效。您可以翻转/旋转、缩放、添加噪音、增加/减少亮度、缩放、裁剪等。
这里重要的是你要遵守现实世界中可能发生的事情。例如,如果您想识别“70 英里/小时限速”标志,那么翻转它没有意义,您永远不会遇到真正翻转的 70 英里/小时标志。如果你想识别一朵花,翻转或旋转它是允许的。对于声音来说也是如此,稍微改变音量/频率不会有太大影响。但是反转音轨会改变它的“含义”,您不必识别现实世界中反向说出的单词。
现在,如果您必须增加销售数据、元数据等表格数据……这会更加棘手,因为您必须小心not将您自己的假设隐式地输入到模型中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)