精确率与召回率:误报和漏报需要分别看
检测系统不能只报告“准确”。抓到了多少真实目标,以及发出的告警有多少是真的,分别对应不同的业务成本。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
But what is a neural network?
视频介绍分类神经网络的基础;本文进一步讨论数据划分或评估指标,视频不是这些指标的逐项教程。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
检测系统不能只报告“准确”。抓到了多少真实目标,以及发出的告警有多少是真的,分别对应不同的业务成本。
理解核心机制
精确率是 TP/(TP+FP),召回率是 TP/(TP+FN)。下面从明确的真假标签计算,分母为零时返回 None,以保留“无定义”和数值零的区别。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
truth = [1, 1, 0, 0, 1]
prediction = [1, 0, 1, 0, 1]
tp = sum(y == p == 1 for y, p in zip(truth, prediction))
fp = sum(y == 0 and p == 1 for y, p in zip(truth, prediction))
fn = sum(y == 1 and p == 0 for y, p in zip(truth, prediction))
precision = tp / (tp + fp) if tp + fp else None
recall = tp / (tp + fn) if tp + fn else None
assert tp == 2 and fp == fn == 1
print(precision, recall)适用边界与常见误区
微平均、宏平均与按样本平均是不同定义。阈值应在验证集上选择,不能反复查看测试集后挑选最好看的结果。
继续练习
为每条记录补上分数,逐步改变阈值,观察误报与漏报的变化,并用业务成本说明最终选择。