🧩 混淆矩阵 · 精准度基石

TP / TN / FP / FN

📌 核心定义 二分类 · 混淆矩阵

🔹 真实 vs 预测

✅ TP 真阳性 ❌ FP 假阳性 ✅ TN 真阴性 ❌ FN 假阴性
  • TP (真阳性) — 实际为正,预测为正 ✔️
  • TN (真阴性) — 实际为负,预测为负 ✔️
  • FP (假阳性) — 实际为负,预测为正 ❌ (Ⅰ类错误)
  • FN (假阴性) — 实际为正,预测为负 ❌ (Ⅱ类错误)

📊 混淆矩阵结构

预测值 真实值 TP FP FN TN 正 (1) 负 (0) 正 (1) 负 (0)

🔍 行:真实类别 · 列:预测类别

📈 混淆矩阵可视化 颜色编码 · 直观评估

✧ 混淆矩阵 ✧
预测:正预测:负
真实:正TP
正确肯定
FN
漏报
真实:负FP
误报
TN
正确否定
📐 常用指标
  • 准确率 = (TP+TN)/(TP+TN+FP+FN)
  • 精确率 = TP/(TP+FP)
  • 召回率 = TP/(TP+FN)
  • F1 = 2·(精确率·召回率)/(精确率+召回率)
# Python · sklearn 混淆矩阵示例
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay
import matplotlib.pyplot as plt

y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1, 1, 0]

cm = confusion_matrix(y_true, y_pred)
print(cm)
# [[TN FP]
#  [FN TP]]

disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=[0,1])
disp.plot(cmap='Blues', values_format='d')
plt.title('混淆矩阵可视化')
plt.show()

🧬 多分类混淆矩阵 扩展到3类以上

对于多分类,矩阵大小为 N×N (N个类别)。

  • TP:对角线元素 (真实i, 预测i)
  • FP:列求和减去TP (其他类预测为i)
  • FN:行求和减去TP (真实i预测为其他)
  • TN:所有其他元素之和
💡 宏平均 / 微平均 基于多分类混淆矩阵计算。
猫 狗 兔 猫 狗 兔 TP猫 TP狗 TP兔 多分类混淆矩阵 (3x3)
# 多分类混淆矩阵示例 (sklearn)
from sklearn.metrics import confusion_matrix
y_true = ['猫', '狗', '兔', '猫', '狗', '兔', '猫', '猫']
y_pred = ['猫', '狗', '兔', '猫', '猫', '兔', '狗', '猫']
cm_multi = confusion_matrix(y_true, y_pred, labels=['猫','狗','兔'])
print(cm_multi)
# 可视化
import seaborn as sns
sns.heatmap(cm_multi, annot=True, fmt='d', cmap='YlOrRd', 
            xticklabels=['猫','狗','兔'], yticklabels=['猫','狗','兔'])
plt.title('多分类混淆矩阵热力图')
plt.show()

⚙️ 模型评估流程 混淆矩阵核心地位

原始数据 训练模型 预测结果 混淆矩阵 TP / TN / FP / FN 迭代优化

⬆️ 混淆矩阵提供精细反馈,驱动模型精准度提升