准确率 85% 听起来还行,但若坏瓜不多,瞎猜「全是好瓜」也能刷到 80%。
要看清模型的真实本事,得打开混淆矩阵。
分类模型给出的是「预测标签」。要评判好坏,必须把预测和真实答案对照起来——这就是模型评估。下面用经典的「挑西瓜」例子贯穿全文。
| 项目 | 数量 | 说明 |
|---|---|---|
| 总样本 | 100 | 全部西瓜 |
| 实际好瓜 | 80 | 正例(Positive) |
| 实际坏瓜 | 20 | 负例(Negative) |
| 模型预测为好瓜 | 75 | 它喊「好」的次数 |
| 模型预测为坏瓜 | 25 | 它喊「坏」的次数 |
只看一个「准确率」往往不够。我们需要一张表,把「猜对了什么、错成了什么」摊开——这张表就是混淆矩阵(Confusion Matrix)。
约定:好瓜 = 正例(Positive),坏瓜 = 负例(Negative)。预测与真实交叉,正好落进四个格子。上面「预测好瓜 75」= 猜对 70 + 误报 5:
| 实际好瓜 | 实际坏瓜 | |
|---|---|---|
| 预测好瓜 | TP = 70 真正例 · 猜对了 |
FP = 5 假正例 · 误报 |
| 预测坏瓜 | FN = 10 假负例 · 漏报 |
TN = 15 真负例 · 猜对了 |
预测好,实际也好。True Positive —— 真的抓对了。
预测好,实际是坏。False Positive —— 误报(狼来了)。
预测坏,实际是好。False Negative —— 漏报(好瓜被扔掉)。
预测坏,实际也坏。True Negative —— 坏瓜被正确拦下。
| 关系 | 计算 |
|---|---|
| 实际好瓜 | TP + FN = 70 + 10 = 80 |
| 实际坏瓜 | FP + TN = 5 + 15 = 20 |
| 预测好瓜 | TP + FP = 70 + 5 = 75 |
| 预测坏瓜 | FN + TN = 10 + 15 = 25 |
| 总样本 | TP + FP + FN + TN = 100 |
在你喊「好瓜」的那些里,真正是好瓜的比例。关心:别把坏的当好的。
实际所有好瓜里,被你成功找出来的比例。关心:别漏掉真正的好瓜。
所有预测里,猜对的占比。直观,但在类别极不平衡时容易「看起来很高、其实没用」。
精确率与召回率的调和平均。两者都高,F1 才高;一个很高另一个很低时,F1 会被拉下来。
你说「好」的时候很靠谱,误报少。适合:推荐商品、垃圾邮件拦截(别误伤正常邮件)。
真正该抓的很少漏。适合:疾病筛查、欺诈检测(宁可多查,别漏掉)。
你可以试试:切换下方场景预设,或拖动 TP / FP / FN / TN 滑块,观察精确率、召回率、准确率与 F1 的实时变化。
场景:挑西瓜。正例 = 好瓜。看看误报与漏报如何影响四个指标。
提高召回率,往往要更「敢猜正例」——FP(误报)可能上升,精确率下降。反过来亦然。选哪个,取决于哪种错误更贵。
类别多于两个时,混淆矩阵变成 N×N。本页统一约定:行 = 预测,列 = 实际(与上面二分类表一致)。对角线上是分对的数量。
| 预测 \\ 实际 | 山鸢尾 | 变色鸢尾 | 维吉尼亚 | 合计(预测) |
|---|---|---|---|---|
| 山鸢尾 | 50 | 1 | 0 | 51 |
| 变色鸢尾 | 2 | 47 | 2 | 51 |
| 维吉尼亚 | 0 | 3 | 45 | 48 |
| 合计(实际) | 52 | 51 | 47 | 150 |
说明:不少教材 / scikit-learn 会写成「行 = 实际,列 = 预测」,只是行列对调,数字含义不变。读表时先看清轴标签。
分类正确:50+47+45 = 142
错分位置一目了然,例如实际山鸢尾被预测成变色鸢尾:2 个
142 / 150 ≈ 94.7%
每个类别仍可单独算精确率/召回率(把「该类 vs 其他」看成二分类),再做宏平均或加权平均。