# 008、模型评估:mAP、混淆矩阵——别让模型在测试集上“作弊”
昨天深夜调试YOLO模型时遇到个诡异现象:训练时loss曲线完美下降,测试集准确率高达98%,结果实际部署到游戏画面里,检测框到处乱飞。打开测试集一看,冷汗下来了——原来测试集和训练集有80%的重合图片,模型只是在“背诵”答案。这个教训让我意识到,不搞懂评估指标,模型优化就是盲人摸象。
## 混淆矩阵:模型到底错在哪里
先看最基础的混淆矩阵,这玩意儿能告诉你模型具体怎么犯错的:
```python
from sklearn.metrics import confusion_matrix
import seaborn as sns
# 假设我们有这些预测和真实标签
# 类别:0-背景,1-英雄,2-小兵,3-防御塔
y_true = [1, 1, 2, 3, 1, 2, 2, 3]
y_pred = [1, 2, 2, 3, 1, 2, 1, 3]
cm = confusion_matrix(y_true, y_pred)
print("混淆矩阵:")
print(cm)
# 输出:
# [[0 0 0 0] # 背景类(我们的数据里没背景样本)
# [2 1 0 0] # 真实为英雄:2个预测正确,1个预测成小兵
# [1 1 2 0] # 真实为小兵:1个预测成英雄,1个预测正确,2个预测正确(这行显示有问题,实际要画图看)
# [0 0 0 2]] # 防御塔全对
```
这里有个坑:混淆矩阵的行列顺序默认按类别数字排序。如果你的类别编号不是从0开始连续
