You need to enable JavaScript to run this app. 目标标签仅为允许标签子集场景下的F1 score计算问题
优惠活动
大模型
产品
解决方案
定价
更多

目标标签仅为允许标签子集场景下的F1 score计算问题

问题根因

你当前使用的macro平均F1会为每一个出现的预测/真实标签单独计算类别F1再取算术平均,在你的场景中:

  • 真实标签target不存在类别3,因此类别3的召回率默认为0,对应类别F1直接为0,拉低了整体平均得分

可选计算方案

1. 仅计算标签中存在的类别(推荐多数场景)

如果你的验证集本身就是不存在类别3的样本,评估需求仅衡量模型在现有真实类别上的表现,可以调用f1_score时添加labels参数指定仅计算真实标签中覆盖的类别:

from sklearn.metrics import f1_score
import numpy as np

predicted = [1,1,2,3,2,1]
target = [1,1,2,2,2,1]
# 提取真实标签中存在的唯一类别
valid_labels = np.unique(target)
f1 = f1_score(target, predicted, average='macro', labels=valid_labels)

这个方案会自动忽略没有真实样本的类别3,仅计算类别1、2的F1再取平均,符合你在当前验证集上的实际效果衡量需求。

2. 使用加权平均(weighted)

如果希望保留对所有预测类别的统计,但降低稀有/缺失类别的权重,可以将平均策略改为weighted,该策略会按每个类别在真实标签中的样本数量为权重计算加权平均F1:

f1 = f1_score(target, predicted, average='weighted')

因为类别3在真实标签中样本数为0,权重为0,不会对最终得分产生影响。但要注意该策略会偏向样本数多的类别。

3. 自定义类别权重(适合已知类别分布的场景)

如果你明确知道三分类的全局类别分布(比如训练集的分布),可以单独计算每个类别的F1后按预设权重手动计算平均,不受验证集标签分布的影响。


注意事项

如果你的验证集本应包含类别3、只是漏标注了,那优先修正验证集的标注问题,再使用标准macro平均计算,才能准确衡量模型的全局三分类性能。

内容的提问来源于stack exchange,提问作者user14675723

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 23:09:03