混淆矩阵:把错误落到具体类别之间
多分类模型的平均指标下降后,很难知道是哪两类容易混淆。混淆矩阵把真实类别和预测类别交叉排列,方便定位错误结构。
▶ 本文含视频讲解▶ 教学视频手动播放 · 英语讲解
But what is a neural network?
视频介绍分类神经网络的基础;本文进一步讨论数据划分或评估指标,视频不是这些指标的逐项教程。此为外部原版课程,多篇笔记可能共用;未剪辑为本文专属视频。
播放器需要能访问 YouTube 的网络;若这里无法加载,可打开原视频。本文与本地图解仍可独立阅读。
问题从哪里出现
多分类模型的平均指标下降后,很难知道是哪两类容易混淆。混淆矩阵把真实类别和预测类别交叉排列,方便定位错误结构。
理解核心机制
先固定标签顺序,再明确行是真值、列是预测。对角线是正确分类,非对角线是具体方向的错误;归一化时也要说明按行还是按列。
动手做一个小实验
Python 3.11 或更新版本,仅使用标准库;将示例保存为 demo.py 后执行 python3 demo.py。数字与样本均为教学演示,不代表真实模型或服务器的测量结果。
labels = ["cat", "dog", "bird"]
index = {label: i for i, label in enumerate(labels)}
truth = ["cat", "cat", "dog", "bird"]
prediction = ["cat", "dog", "dog", "cat"]
matrix = [[0] * 3 for _ in labels]
for actual, predicted in zip(truth, prediction, strict=True):
matrix[index[actual]][index[predicted]] += 1
assert sum(map(sum, matrix)) == 4
print(labels, matrix)适用边界与常见误区
空类别的归一化分母可能为零。矩阵只能呈现标签层面的错误,仍应回到原样本,检查标注歧义、输入质量与分布差异。
继续练习
分别按行和按列归一化,并解释这两种百分比分别回答什么问题;为每个主要错误格子抽取样本复核。