使用不平衡数据提前停止 f1 分数的问题

数据挖掘 神经网络 深度学习 损失函数 阶级失衡 公制
2021-09-16 07:08:37

我有一个高度不平衡的数据集,次要类的比例不到 0.5%。使用 Keras,我在训练集上训练 DNN 并在验证集上评估性能。损失函数为binary_crossentropy

我将我的提前停止设置在 f1 分数上,而不是验证损失。我在训练期间观察到的是 f1 分数上下波动,而验证损失正在减少。实际上,我最终以非常低的 f1 分数结束了提早停止,尽管 f1 分数早在许多时代之前......

我对此感到困惑。我应该提前停止性能指标吗?我们是否应该始终使用验证损失作为早期停止标准?谢谢。

2个回答

F1是基于硬分类;如果概率分数徘徊在阈值附近,那么分类可能会失败很多,导致 F1 分数不稳定。

在存在这种不平衡的情况下,低 F1 分数并不足为奇。默认的截止值 0.5 通常会导致高召回率但低精度。

一个可能的问题是 Precision 和 Recall 非常不同。

通常,F1 仅在 Precision 和 Recall 相似时才有用。如果它们非常不平衡,它将破坏您的 F1 分数。因此,基于精确率或召回率,提前停止可能会更好。

注意:Keras 喜欢数据的标准化。但是,如果您的数据集中有很多异常值,您可以将它们压缩到它们将占主导地位的规范化中。