BERT多标签任务classification_report支持数异常问题及代码修正咨询
多标签分类任务中classification_report的support异常疑问解答
1. Support显示409是正常现象
这完全正常,因为多标签任务中classification_report的support字段不是验证集的样本总数,而是对应标签的正样本数量——也就是该标签在验证集中被标记为1的样本条数。
你的验证集共200条数据,但每条数据可以同时属于多个标签(比如一条数据可能同时打了A和B标签),四个标签的正样本数量总和为409,这是多标签任务的典型特征。比如标签A有100个正例、B有120个、C有90个、D有99个,加起来就是409,完全合理。
2. 代码正确性验证
你的代码在多标签任务的处理上是标准且正确的:
- 选用
BCEWithLogitsLoss损失函数,适配多标签分类的标签格式 - 预测阶段用
sigmoid将模型输出的logits转为概率,再通过0.5阈值生成二进制预测结果 - 传入
classification_report的test_labels和test_preds是符合多标签要求的二维矩阵(形状为[样本数, 标签数])
如果需要确认验证集样本数是否正确,可以在数据拆分后加入以下代码:
print(f"验证集样本数:{len(test_df)}") # 正常会输出200
3. 多标签任务下classification_report的详细说明
在多标签场景中,classification_report会针对每个标签单独计算评估指标,各字段含义如下:
- precision(精确率):预测为该标签的样本中,真正属于该标签的比例,公式:
TP/(TP+FP) - recall(召回率):真实为该标签的样本中,被模型正确预测出来的比例,公式:
TP/(TP+FN) - f1-score:精确率与召回率的调和平均值,综合衡量模型对该标签的分类性能,公式:
2*(precision*recall)/(precision+recall) - support:该标签在验证集中的正样本总数(即真实标签里该标签为1的样本数量)
- macro avg:对所有标签的指标取算术平均,不考虑各标签的样本数量差异
- weighted avg:对所有标签的指标按该标签的support值加权平均,兼顾标签的样本数量占比
- samples avg:先对每个样本的所有标签指标取平均,再计算所有样本的整体平均值,适用于关注单样本整体分类效果的场景
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

