Micro-F1分数(多选)
Micro-F1 分数是用于多标签(multi-label)或多类(multi-class)分类评估的重要指标,特别适用于样本不均衡时评估整体性能。它在**多选任务(multi-label classification)**中尤为常用。
🧠 一、Micro-F1 的定义
Micro-F1 是基于所有标签的 全局预测统计量计算出的 F1 值:
Micro-F1 = 2 ⋅ TP total 2 ⋅ TP total + FP total + FN total \text{Micro-F1} = \frac{2 \cdot \text{TP}_{\text{total}}}{2 \cdot \text{TP}_{\text{total}} + \text{FP}_{\text{total}} + \text{FN}_{\text{total}}} Micro-F1=2⋅TPtotal+FPtotal+FNtotal2⋅TPtotal
- 它先将所有标签的 TP(True Positive)、FP(False Positive)、FN(False Negative)加总,
- 再计算 F1 分数。
✅ 二、应用场景(多选)
多选任务通常表现为多标签分类问题,例如:
y_true = [[1, 0, 1, 0], # 样本1:标签0和2是正例[0, 1, 1, 1], # 样本2:标签1、2、3是正例
]y_pred = [[1, 0, 1, 1], # 样本1:预测对了0和2,多选了3[0, 0, 1, 1], # 样本2:预测对了2、3,漏了1
]
🛠 三、如何计算 Micro-F1(Python 示例)
使用 sklearn.metrics.f1_score
设置 average='micro'
:
from sklearn.metrics import f1_scorey_true = [[1, 0, 1, 0],[0, 1, 1, 1],
]y_pred = [[1, 0, 1, 1],[0, 0, 1, 1],
]# 计算 micro-F1
micro_f1 = f1_score(y_true, y_pred, average='micro')
print(f"Micro-F1 分数: {micro_f1:.4f}")
📊 四、Micro vs Macro vs Weighted F1
评估方式 | 含义 | 适用场景 |
---|---|---|
Micro-F1 | 全局统计 TP/FP/FN 后求 F1 | 标签不平衡时最稳定 |
Macro-F1 | 每个标签分别计算 F1,再平均 | 看每个类是否表现一致 |
Weighted-F1 | Macro-F1 加权平均(按样本数) | 类别不均衡但关心主类 |
📘 五、注意事项
- Micro-F1 与 Accuracy 的数值在多标签任务中差异较大,因为 Accuracy 需要 标签完全匹配,而 Micro-F1 允许部分匹配。
- 如果你用的模型返回了 logits 或概率(如
[0.8, 0.1, 0.9, 0.3]
),要先进行阈值处理(如 0.5)再转成 0/1 标签才能评估:
import numpy as np# 假设模型输出为概率
y_prob = np.array([[0.8, 0.1, 0.9, 0.3],[0.2, 0.7, 0.95, 0.6],
])
y_pred = (y_prob >= 0.5).astype(int)
如果你可以提供模型的预测结果(多标签格式)和真实标签,我可以帮你计算 Micro-F1、Macro-F1、准确率等指标。是否需要我帮你计算一下?