Confusion Matrix
混淆矩阵(Confusion Matrix)是衡量 ML 分类模型的一个工具。 本质上是一个表格,通过将模型的预测结果与样本的真实标签进行交叉对比,展示模型在各个类别上的预测准确与混淆情况。
一、 二分类混淆矩阵
我们一般用是基础形态,也就是二分类混淆矩阵。说实话我还没见过使用多分类形态的情况。
在二分类问题中(以预测“正例 1 / 负例 0”为例,如“患病/健康”、“欺诈/正常”),混淆矩阵是一个 $2 \times 2$ 的矩阵:
注:在常见的库(如
scikit-learn)和学术界标准中,通常行表示真实标签(True),列表示预测结果(Predicted):
| 预测为正例 (Predicted 1) | 预测为负例 (Predicted 0) | |
|---|---|---|
| 真实为正例 (Actual 1) | TP (True Positive, 真正例) | FN (False Negative, 假负例) |
| 真实为负例 (Actual 0) | FP (False Positive, 假正例) | TN (True Negative, 真负例) |
快速记忆
- 前一个字母(T / F):代表模型猜对了没有(True 猜对了,False 猜错了)。
-
后一个字母(P / N):代表模型预测的结果(Positive 还是 Negative)。
- TP:模型猜是 1,真实是 1(猜对了正例)。
- TN:模型猜是 0,真实是 0(猜对了负例)。
- FP(又称第一类错误 Type I Error):模型猜是 1,但真实是 0(误报 / 假阳性)。
- FN(又称第二类错误 Type II Error):模型猜是 0,但真实是 1(漏报 / 假阴性,漏网之鱼意思是)。
二、 混淆矩阵衍生评价指标
单看准确率往往会被欺骗,混淆矩阵的 4 个基本数值可以组合计算出以下关键指标:
1. 准确率 (Accuracy)
- 含义:全部样本中,猜对的比例。 \(\text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}}\)
- 局限性:在样本不均衡时(例如 99% 的样本是健康的),即使模型全猜健康,准确率也有 99%,但对识别病人毫无意义。
2. 精确率 / 查准率 (Precision)
- 含义:在所有模型判定为正例的样本中,到底有多少真是正例? \(\text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}}\)
- 应用场景:垃圾邮件拦截(宁可漏掉几封,绝不能把重要邮件当垃圾拦截)。
3. 召回率 / 查全率 / 真正率 (Recall / Sensitivity(医学领域) / TPR)
- 含义:在所有真实为正例的样本中,模型找出了多少;是 ROC 曲线的纵坐标 \(\text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}}\)
- 应用场景:RAG看重,癌症筛查、地震预警(宁可误诊再复查,绝不能漏诊放过一个病人)。
4. 特异度 / 真负率 (Specificity / TNR)
- 含义:在所有真实为负例的样本中,模型正确识别出的比例。 \(\text{Specificity} = \frac{\text{TN}}{\text{TN} + \text{FP}}\)
5. 假正率 (False Positive Rate, FPR)
- 含义:所有负样本中,被误判为正样本的比例(即 $1 - \text{Specificity}$,也是 ROC 曲线的横坐标)。 \(\text{FPR} = \frac{\text{FP}}{\text{TN} + \text{FP}}\)
6. F1-Score
- 含义:精确率(Precision)和召回率(Recall)的调和平均数,用来综合权衡二者: \(\text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}\)
三、 实例演示
假设某医院用 AI 筛查某种罕见病(共 100 人受检):
- 真实情况:有病(正例)10 人,健康(负例)90 人。
- 模型的检测结果统计为:
- 真实患病且检测阳性(TP):8 人
- 真实患病但检测阴性(FN):2 人(漏诊)
- 真实健康但误测阳性(FP):9 人(误诊)
- 真实健康且检测阴性(TN):81 人
绘制混淆矩阵如下:
| 真实 \ 预测 | 预测阳性 (1) | 预测阴性 (0) | 合计 |
|---|---|---|---|
| 真实患病 (1) | 8 (TP) | 2 (FN) | 10 (P) |
| 真实健康 (0) | 9 (FP) | 81 (TN) | 90 (N) |
| 合计 | 17 | 83 | 100 |
- 准确率:$(8 + 81) / 100 = 89\%$
- 精确率:$8 / (8 + 9) \approx 47.1\%$(告诉你阳性,其实只有不到一半真有病)
- 召回率:$8 / (8 + 2) = 80\%$(抓出了 80% 的患者)
四、 多分类混淆矩阵(扩展)
如果有 $K$ 个类别(比如识别“猫、狗、兔”),混淆矩阵会扩展为 $K \times K$:
| 真实 \ 预测 | 预测为猫 | 预测为狗 | 预测为兔 |
|---|---|---|---|
| 真实为猫 | 45 | 3 | 2 |
| 真实为狗 | 4 | 40 | 6 |
| 真实为兔 | 1 | 2 | 47 |
- 对角线上的数值:表示模型预测正确的样本数(猫猜对45次,狗猜对40次,兔猜对47次)。
- 非对角线上的数值:直观展示了模型最容易把谁误认成谁。例如上表中,有 6 只狗被误认成了兔子。
AUC-ROC
AUC 是 ROC 曲线下方的定积分面积。 AUC 在统计学上的本质是:任取一个正样本和一个负样本,模型对正样本预测得分高于负样本的概率。
\[\text{AUC} = \int_{0}^{1} \text{TPR} \, d(\text{FPR})\]- 离散梯形近似(实际编程计算时使用): \(\text{AUC} \approx \sum_{i=1}^{k} (\text{FPR}_i - \text{FPR}_{i-1}) \times \frac{\text{TPR}_i + \text{TPR}_{i-1}}{2}\)
L1 & L2 Norm
假设有一个 $n$ 维向量 $x = [x_1, x_2, \dots, x_n]$:
- L1 范数(曼哈顿范数 / 绝对值和):
\(||x||_1 = \sum_{i=1}^n |x_i| = |x_1| + |x_2| + \dots + |x_n|\)
- 向量各元素绝对值的和。在空间中对应两点间的曼哈顿距离。
- L2 范数(欧几里得范数 / 模长):
\(||x||_2 = \sqrt{\sum_{i=1}^n x_i^2} = \sqrt{x_1^2 + x_2^2 + \dots + x_n^2}\)
- 向量各元素平方和的平方根。在空间中对应直观的欧几里得距离。
常见应用场景
- 机器学习正则化(Regularization)
- L1 正则化(Lasso 回归):用于高维数据中的特征选择(将不重要的特征权重直接压缩为 0),减少特征维度,提升模型可解释性。
- L2 正则化(Ridge 岭回归 / 权重衰减 Weight Decay):用于防止过拟合,使所有参数权重尽量平滑、分散变小,提升模型泛化能力。
- Elastic Net(弹性网络):同时使用 L1 和 L2 正则化,结合两者的优势。
- 损失函数(Loss Function)
- L1 Loss(MAE - 平均绝对误差):适用于数据集中存在较多噪声或异常值的回归任务。
- L2 Loss(MSE - 均方误差):最常用的标准损失函数,计算快,对预测偏差较大的样本惩罚更重。