【机器学习&深度学习】多分类评估策略:混淆矩阵计算场景模拟示例

目录

前言摘要

一、假设任务:三分类情感分析

二、假设混淆矩阵如下(真实值为行,预测值为列):

三、每个评估类别的指标计算

[➤ 类别 0(正面):](#➤ 类别 0(正面):)

[➤ 类别 1(中性):](#➤ 类别 1(中性):)

[➤ 类别 2(负面):](#➤ 类别 2(负面):)

四、每类指标汇总表格

五、平均策略计算(宏平均、加权平均、微平均)

[🧮 宏平均(Macro Average)](#🧮 宏平均(Macro Average))

[🧮 加权平均(Weighted Average)](#🧮 加权平均(Weighted Average))

[🧮 微平均(Micro Average)](#🧮 微平均(Micro Average))

六、最终平均结果表格

[✅ 总结](#✅ 总结)


前言摘要

在多分类任务中,仅凭一个准确率远远无法全面判断模型优劣。为了真正理解模型的预测表现,我们需要深入分析每个类别的精确率、召回率、F1 分数,并结合宏平均、加权平均、微平均等策略,从多个维度评估整体性能。

本文以一个三分类情感分析任务为例,构造具体的混淆矩阵,并逐类计算出关键评估指标,带你系统掌握多分类模型评估的核心方法与策略。无论你是新手入门还是经验工程师,相信这篇实战推导都会帮你更清晰理解"评估指标背后的意义"。

【全文概括】

本文通过一个三分类情感分析示例,手工推导并计算各类精确率、召回率、F1 分数及三种平均策略,全面剖析多分类模型评估指标的计算与适用场景。


一、假设任务:三分类情感分析

  • 类别 0:正面

  • 类别 1:中性

  • 类别 2:负面


二、假设混淆矩阵如下(真实值为行,预测值为列):

实际 \ 预测 0(正面) 1(中性) 2(负面) 支持数(Support)
0 正面 40 5 5 50
1 中性 3 32 5 40
2 负面 2 3 25 30

三、每个评估类别的指标计算

我们对每一类手动计算:

➤ 类别 0(正面):

  • TP = 40

  • FP = 来自其他行预测为 0 的:3(中性错预测为正面) + 2(负面错预测为正面) = 5

  • FN = 实际为正面但预测错的:5(→中性)+ 5(→负面) = 10

指标 公式 数值
精确率 P₀ 40 / (40 + 3+2) = 40 / 45 0.8889
召回率 R₀ 40 / (40 + 5+5) = 40 / 50 0.8000
F1 分数 2 × (P×R)/(P+R) 0.8421
支持数 --- 50

➤ 类别 1(中性):

  • TP = 32

  • FP = 5(正面错判为中性)+ 3(负面错判为中性) = 8

  • FN = 3 + 5 = 8

指标 数值
精确率 P₁ 32 / (32 + 3+5) = 0.8000
召回率 R₁ 32 / (32 + 8) = 0.8000
F1 分数 0.8000
支持数 40

➤ 类别 2(负面):

  • TP = 25

  • FP = 5(正面→负面)+ 5(中性→负面) = 10

  • FN = 2(→正面)+ 3(→中性) = 5

指标 数值
精确率 P₂ 25 / (25 + 10) = 0.7143
召回率 R₂ 25 / (25 + 5) = 0.8333
F1 分数 2×(0.7143×0.8333)/(0.7143+0.8333) ≈ 0.7692
支持数 30

四、每类指标汇总表格

类别 精确率(P) 召回率(R) F1 分数 支持数(Support)
正面 0 0.8889 0.8000 0.8421 50
中性 1 0.8000 0.8000 0.8000 40
负面 2 0.7143 0.8333 0.7692 30
类别 精确率(Precision) 召回率(Recall) F1 分数(F1 Score) 支持数(Support)
类别 0(正面) 40 / (40 + 3+2) = 0.8889 40 / (40 + 5+5) = 0.8000 2×(0.8889×0.8)/(0.8889+0.8) = 0.8421 50
类别 1(中性) 32 / (32 + 8) = 0.8000 32 / (32 + 8) = 0.8000 0.8000 40
类别 2(负面) 25 / (25 + 10) = 0.7143 25 / (25 + 5) = 0.8333 2×(0.7143×0.8333)/(0.7143+0.8333) ≈ 0.7692 30

对照说明:

  • 精确率:预测为某类中有多少是真实的

  • 召回率:真实为某类中有多少被预测对

  • F1 分数:精确率与召回率的调和平均

  • 支持数:该类在真实标签中的出现次数


五、平均策略计算(宏平均、加权平均、微平均)


🧮 宏平均(Macro Average)

不考虑样本多少,每个类算完后直接平均

python 复制代码
P_macro = (0.8889 + 0.8000 + 0.7143) / 3 ≈ 0.8011 
R_macro = (0.8000 + 0.8000 + 0.8333) / 3 ≈ 0.8111 
F1_macro = (0.8421 + 0.8000 + 0.7692) / 3 ≈ 0.8038

🧮 加权平均(Weighted Average)

考虑每类样本占比,按"支持数"加权平均

总样本数:50 + 40 + 30 = 120

python 复制代码
P_weighted = (0.8889×50 + 0.8000×40 + 0.7143×30) / 120 ≈ 0.8119 
R_weighted = (0.8000×50 + 0.8000×40 + 0.8333×30) / 120 ≈ 0.8083 
F1_weighted = (0.8421×50 + 0.8000×40 + 0.7692×30) / 120 ≈ 0.8084

🧮 微平均(Micro Average)

把所有 TP / FP / FN 累加后统一计算

(不算每类单独指标)

【原数据统计】

实际 \ 预测 0(正面) 1(中性) 2(负面) 支持数(Support)
0 正面 40 5 5 50
1 中性 3 32 5 40
2 负面 2 3 25 30

【Total TP 的计算】

也就是除斜角线的数值相加,得到预测对的总数;

正面预测对40个;

中性预测对32个;

负面预测对25个;

Total FP(总假正例) 的计算

也就是除斜角线的数值,其它数值相加得到预测错的总数;

类别 预测成该类的样本总数 实际就是该类的有几个(TP) FP(预测错的)
类别 0 40(来自0) + 3(来自1) + 2(来自2) = 45 TP=40 FP=45 - 40 = 5
类别 1 5(来自0) + 32(来自1) + 3(来自2) = 40 TP=32 FP=40 - 32 = 8
类别 2 5(来自0) + 5(来自1) + 25(来自2) = 35 TP=25 FP=35 - 25 = 10

【Total FN(总假负例)的计算】

实际总数---预测对的总数=模型"漏掉"的总样本数

我们从每一行看:实际是某类,但模型预测成别的类了(除了对角线 TP 之外的)

类别 实际是该类的总数 被预测对的有几个(TP) FN(预测错的)
类别 0 50 TP = 40 FN = 50 - 40 = 10
类别 1 40 TP = 32 FN = 40 - 32 = 8
类别 2 30 TP = 25 FN = 30 - 25 = 5
类别 TP FP(列总减去TP) FN(行总减去TP)
0 40 5 10
1 32 8 8
2 25 10 5
✅ 合计 97 23 23
  • Total TP = 40 + 32 + 25 = 97 #斜角线

  • Total FP = 5 + 8 + 10 = 23 #

  • Total FN = 10 + 8 + 5 = 23

python 复制代码
P_micro = TP / (TP + FP) = 97 / (97 + 23) = 97 / 120 ≈ 0.8083
R_micro = TP / (TP + FN) = 97 / (97 + 23) = 97 / 120 ≈ 0.8083 
F1_micro = same as P and R when they are equal = 0.8083

六、最终平均结果表格

平均方式 精确率(P) 召回率(R) F1 分数
宏平均 0.8011 0.8111 0.8038
加权平均 0.8119 0.8083 0.8084
微平均 0.8083 0.8083 0.8083

✅ 总结

类型 特点 适合场景
宏平均(Macro) 所有类同等重要 情感三分类
加权平均(Weighted) 考虑类别数量占比 数据不平衡
微平均(Micro) 聚焦全局效果 多标签分类、大规模任务