文章目录
前言
多分类逻辑回归混淆矩阵是用于评估多分类模型(例如逻辑回归扩展到多类情况,如Softmax回归)性能的一种特定表格布局。
例如:

它是什么
混淆矩阵是一个 N × N N \times N N×N 的矩阵(其中 N N N 是类别的数量),用于比较模型预测结果与真实标签之间的差异。
- 行:通常代表真实的类别(实际值)。
- 列:通常代表模型预测的类别(预测值)。
- 单元格:矩阵中的每个单元格 C i j C_{ij} Cij 表示"真实类别为 i i i 但被模型预测为类别 j j j"的样本数量。
示例:三分类问题(类别:猫、狗、兔)
假设我们有一个包含100个样本的测试集,混淆矩阵可能如下所示:
| 真实\预测 | 猫 | 狗 | 兔 |
|---|---|---|---|
| 猫 | 15 | 3 | 2 |
| 狗 | 4 | 25 | 1 |
| 兔 | 2 | 3 | 45 |
- 对角线(15, 25, 45):都是预测正确的情况。
- 非对角线:都是预测错误的情况。eg. 第二行第一列的 4 表示"有4只真实的狗被错误地预测成了猫"。
主要用途
混淆矩阵不仅仅是一张数字表,它对于理解模型在多分类问题中的表现至关重要,因为它能揭示比简单准确率更丰富的信息。
直观展示全局错误分布
- 只看准确率(Accuracy),你可能只知道模型在测试集上正确率是 85%(对角线和除以总数)。
- 但混淆矩阵能告诉你错误都发生在哪些类别之间。eg. 从上面的矩阵可以看出,模型经常混淆"猫"和"狗",但很少把"猫"和"兔"混淆。
计算多分类评估指标
基于混淆矩阵,可以为每个类别计算以下关键指标:
-
精确率:预测为该类别的样本中,有多少是真正正确的。eg. 精确率------"预测为猫的里面,有多少是真的猫?"精确率 = 对角线元素 该列的总和 \text{精确率} = \frac{\text{对角线元素}}{\text{该列的总和}} 精确率=该列的总和对角线元素
针对"猫":
15 15 + 4 + 2 = 0.714 \frac{15}{15+4+2}=0.714 15+4+215=0.714
-
召回率:真实为该类别的样本中,有多少被正确找出来了。eg. 召回率------"真实为猫的里面,有多少被正确预测出来了?"召回率 = 对角线元素 该行的总和 \text{召回率} = \frac{\text{对角线元素}}{\text{该行的总和}} 召回率=该行的总和对角线元素
针对"猫":
15 15 + 3 + 2 = 0.75 \frac{15}{15+3+2}=0.75 15+3+215=0.75
-
F1分数:精确率和召回率的调和平均。F1 = 2 × 精确率 × 召回率 精确率 + 召回率 \text{F1} = \frac{2 \times \text{精确率} \times \text{召回率}}{\text{精确率} + \text{召回率}} F1=精确率+召回率2×精确率×召回率
针对"猫":
2 × 0.714 × 0.75 0.714 + 0.75 ≈ 0.731 \frac{2 \times 0.714 \times 0.75}{0.714 + 0.75} \approx 0.731 0.714+0.752×0.714×0.75≈0.731
识别"易混淆"的类别(模型偏差)
这是混淆矩阵最重要的诊断功能。
如果你发现某两个类别(比如"狼"和"哈士奇")之间的非对角线数字特别高,这意味着:
- 特征相似性:模型无法有效区分这两个类别,可能是因为它们的特征过于相似,或者训练数据中这两个类别的区分度不够。
- 数据不平衡:某个类别样本太少,导致模型倾向于将其预测为样本多的那个大类。
发现"类别不平衡"的影响
通过观察矩阵的行和与列和,可以判断模型是否偏向于多数类。
- 如果某个类别的样本数(行和)远大于其他类别,但模型表现不佳,混淆矩阵会显示模型倾向于把别的类预测为这个大类。
准确率
为了方便阅读,再次列出矩阵和之前算出的每类指标:
| 真实\预测 | 猫 | 狗 | 兔 | 样本总数(行和) |
|---|---|---|---|---|
| 猫 | 15 | 3 | 2 | 20 |
| 狗 | 4 | 25 | 1 | 30 |
| 兔 | 2 | 3 | 45 | 50 |
| 预测总数(列和) | 21 | 31 | 48 | 100(总计) |
每类的性能指标:
猫:精确率 P c ≈ 0.714 ( 25 / 21 ),召回率 R c = 0.75 , F 1 ≈ 0.731 狗:精确率 P d ≈ 0.806 ( 25 / 31 ),召回率 R d ≈ 0.833 ( 25 / 30 ), F 1 ≈ 0.819 兔:精确率 P r ≈ 0.938 ( 45 / 48 ),召回率 R r = 0.9 ( 45 / 50 ), F 1 ≈ 0.918 \text{猫}:\text{精确率 }P_c \approx 0.714 (25/21),\text{召回率 }R_c = 0.75 ,F1 ≈ 0.731 \\ \text{狗}:\text{精确率 }P_d \approx 0.806 (25/31),\text{召回率 }R_d \approx 0.833 (25/30),F1 ≈ 0.819 \\ \text{兔}:\text{精确率 }P_r \approx 0.938 (45/48),\text{召回率 }R_r = 0.9 (45/50),F1 ≈ 0.918\\ 猫:精确率 Pc≈0.714(25/21),召回率 Rc=0.75,F1≈0.731狗:精确率 Pd≈0.806(25/31),召回率 Rd≈0.833(25/30),F1≈0.819兔:精确率 Pr≈0.938(45/48),召回率 Rr=0.9(45/50),F1≈0.918
总体准确率
在讲两种平均之前,先明确最简单的总体准确率作为参照:
公式: 所有预测正确的样本数 总样本数 计算: 15 + 25 + 45 100 = 85 100 = 0.85 \text{公式:} \frac{\text{所有预测正确的样本数}}{\text{总样本数}}\\[10pt] \text{计算:} \frac{15 + 25 + 45}{100} = \frac{85}{100} = \mathbf{0.85}\\[10pt] 公式:总样本数所有预测正确的样本数计算:10015+25+45=10085=0.85
含义为整体上有 85% 的样本被正确分类。
平均准确率
这里容易和上面的总体准确率混淆,需要注意区分。
别名:宏平均准确率- 计算方式:先分别算出每一类的准确率(注意:是每一类的准确率,不是精确率),然后对所有类取算术平均。
- 每一类的准确率 = 该类预测正确的数量 / 该类真实的总数量
运算步骤:
- 猫的准确率: 15 / 20 = 0.75 2. 狗的准确率: 25 / 30 ≈ 0.833 3. 兔的准确率: 45 / 50 = 0.9 4. 平均准确率 = 0.75 + 0.833 + 0.9 3 ≈ 2.483 3 = 0.828 \text{1. 猫的准确率:} 15 / 20 = 0.75\\[10pt] \text{2. 狗的准确率:} 25 / 30 \approx 0.833\\[10pt] \text{3. 兔的准确率:} 45 / 50 = 0.9\\[10pt] \text{4. 平均准确率} = \frac{0.75 + 0.833 + 0.9}{3} \approx \frac{2.483}{3} = \mathbf{0.828}\\[10pt] 1. 猫的准确率:15/20=0.752. 狗的准确率:25/30≈0.8333. 兔的准确率:45/50=0.94. 平均准确率=30.75+0.833+0.9≈32.483=0.828
为什么是 0.828,而不是总体准确率的 0.85?
- 原因:
平均准确率给每个类别赋予了相同的权重(各占 1/3)。 - 虽然"兔"类表现很好(0.9)且样本多,但"猫"类表现较差(0.75)且样本少。在计算平均准确率时,"猫"类差的表现在
权重上被提升到了和"兔"类一样高,因此分数被拉低到了 0.828。
加权平均准确率
- 别名:加权宏平均准确率
- 计算方式:先算出每一类的准确率,然后用该类样本数量占总数的比例作为权重,进行加权平均。
运算步骤:
- 各类权重:
- 猫:20/100 = 0.2
- 狗:30/100 = 0.3
- 兔:50/100 = 0.5
- 加权计算:
加权平均准确率 = ( 0.75 × 0.2 ) + ( 0.833 × 0.3 ) + ( 0.9 × 0.5 ) = 0.15 + 0.2499 + 0.45 ≈ 0.85 \begin{aligned} \text{加权平均准确率} &= (0.75 \times 0.2) + (0.833 \times 0.3) + (0.9 \times 0.5) \\ &= 0.15 + 0.2499 + 0.45 \\ &\approx \mathbf{0.85} \end{aligned} 加权平均准确率=(0.75×0.2)+(0.833×0.3)+(0.9×0.5)=0.15+0.2499+0.45≈0.85
发现了吗?
这里的 0.85 正好等于最开始的总体准确率!
- 原因:
加权平均准确率本质上就是在计算总体准确率,只是换了一种拆分再求和的形式。 - 因为每一类的
准确率乘以该类样本权重,实际上就是在计算该类正确分类的样本数占总数的比例,求和后自然等于总体准确率。
对比
为了更直观地对比这几个指标的区别,可以看下面这张表:
| 指标 | 计算核心 | 特点 | 适用场景 |
|---|---|---|---|
| 总体准确率 | 正确的总数 / 总数 | 容易被大类别主导 | 类别均衡时的快速参考 |
| 平均准确率 | 各类准确率的算术平均 | 平等对待每个类别,小类别的表现和大类别一样重要 | 关注小类、数据不平衡、需要保守评估时 |
| 加权平均准确率 | 各类准确率的加权平均 | 按样本量加权,结果等于总体准确率 | 官方报告常用,反映按样本量加权后的综合表现 |
回到"猫狗兔"的例子思考
- 如果只看
总体准确率(0.85),可能会觉得模型还不错。 - 但如果查看
平均准确率(0.828),就会发现模型在少数类(猫)上的表现其实拖了后腿,不如多数类(兔)那么理想。平均准确率正是帮助捕捉到这种差异的工具。