我正在运行一个文本分类任务,并使用sklearn.metrics.classification_report。我注意到,在许多情况下,支持0的标签也会显示出来,但这是否是预期的行为呢?
给出一个具体的例子,假设我手头的任务有五个标签:0、1、2、3和4。我想确保我的模型能够在标签0上进行正确的训练,所以我创建了一个单独的数据集,只包含这些标签。第一个时代之后的分类报告如下所示:
precision recall f1-score support
0 1.0000 0.8929 0.9434 9713
1 0.0000 0.0000 0.0000 0
2 0.0000 0.0000 0.0000 0
3 0.0000 0.0000 0.0000 0
accuracy 0.8929 9713
macro avg 0.2500 0.2232 0.2359 9713
weighted avg 1.0000 0.8929 0.9434 9713据我所知(如果我错了,请纠正我),左边列上的标签是包含在y_true中的标签。因此,报告不仅不应该显示1、2和3,而且也不应该显示4,如果行为应该是一致的。
我已经检查了我的数据,并确保它只包含0,因此它不是数据问题,我还进行了双重检查,以确保在调用函数时没有交换y_true和y_pred。
为什么会发生这种行为?有办法解决吗?
发布于 2022-10-04 07:33:36
左边的标签是预测的标签。换句话说,在某些情况下(大约11%),您的模型仍然可以预测类1、2和3(但不是4),在理想情况下它应该预测0。
编辑:准确地说,classification_report()在y_true和y_pred上运行sklearn.utils.multiclass.unique_labels() (除非显式指定标签列表),这与本例中预测的标签相同。
剩下的只是包装precision_recall_fscore_support()。The support is the number of occurrences of each class in y_true.
https://stackoverflow.com/questions/73941985
复制相似问题