是否适当使用调整平衡数据集的类权重?

数据挖掘 Python 喀拉斯 张量流 数据集 卷积神经网络
2022-02-23 21:02:12

我问这个是因为我目前正在使用一个用于诊断肺炎的 CNN 模型。最初,我按照 kaggle 上的笔记本构建模型,从而了解每一位代码的用途等。使用的数据集相当不平衡,肺炎病例的数量远远超过正常(健康)病例。因此 model.fit class_weight 参数设置为{0:6.0, 1:0.5}. (0为正常,1为肺炎)

从那时起,在研究模型和进行调整的同时,我获得了一些新数据来添加到模型中,这样现在数据集就相当平衡了。事实上,我确保将数据加载到模型中以使其完全平衡,对使用的数据帧进行编码以确保训练测试和验证数据帧中肺炎病例和正常病例的数量相等。

因此,因此,我现在正在尝试删除 class_weights 参数的使用(据我所知)它没有必要并且可能会给结果带来一些偏差。然而,在这样做的过程中,模型似乎不再提高准确性。它基本上无限期地停在 0.5 上。然而,在应用权重后,我达到了 0.90+ 的准确度。

简单地说,这有什么原因吗?代码很长,但如果认为需要,我很乐意发布它,但我觉得这可能是由于我缺乏理解而不是代码错误(因为它在其他方面工作正常且符合预期)。提前致谢。

编辑:为了清晰和理解,我对应用的权重值的可能值进行了网格搜索。它确认了一个合适的选择0:~4.0, 1:0.4,但也建议0:1, 1:5.0

编辑 2:为了更清楚起见,链接到包含模型代码和输出文件等的 github。https://github.com/GeeKandaa/ML-Code

1个回答

类权重即使对于平衡数据也很重要,例如,如果某个类比其他类更重要,那么这个类的损失应该更多。

人们甚至可以将类权重视为独特的额外超参数,它们对结果(无论是正面的还是负面的)都有自己的影响,并且不加解释地对待它们

相关:class_weight 在决策树中如何工作?