当前位置: 首页 > news >正文

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

目录

前言摘要

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

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

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

➤ 类别 0(正面):

➤ 类别 1(中性):

➤ 类别 2(负面):

四、每类指标汇总表格

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

🧮 宏平均(Macro Average)

🧮 加权平均(Weighted Average)

🧮 微平均(Micro Average)

六、最终平均结果表格

✅ 总结


前言摘要

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

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

【全文概括】

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


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

  • 类别 0:正面

  • 类别 1:中性

  • 类别 2:负面


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

实际 \ 预测0(正面)1(中性)2(负面)支持数(Support)
0 正面405550
1 中性332540
2 负面232530


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

我们对每一类手动计算:

➤ 类别 0(正面):

  • TP = 40

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

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

指标公式数值
精确率 P₀40 / (40 + 3+2) = 40 / 450.8889
召回率 R₀40 / (40 + 5+5) = 40 / 500.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)
正面 00.88890.80000.842150
中性 10.80000.80000.800040
负面 20.71430.83330.769230
类别精确率(Precision)召回率(Recall)F1 分数(F1 Score)支持数(Support)
类别 0(正面)40 / (40 + 3+2) = 0.888940 / (40 + 5+5) = 0.80002×(0.8889×0.8)/(0.8889+0.8) = 0.842150
类别 1(中性)32 / (32 + 8) = 0.800032 / (32 + 8) = 0.80000.800040
类别 2(负面)25 / (25 + 10) = 0.714325 / (25 + 5) = 0.83332×(0.7143×0.8333)/(0.7143+0.8333) ≈ 0.769230

对照说明:

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

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

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

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


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


🧮 宏平均(Macro Average)

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

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

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 正面405550
1 中性332540
2 负面232530

【Total TP 的计算】

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

正面预测对40个;

中性预测对32个;

负面预测对25个;

Total FP(总假正例)的计算

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

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

 

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

实际总数—预测对的总数=模型“漏掉”的总样本数

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

类别实际是该类的总数被预测对的有几个(TP)FN(预测错的)
类别 050TP = 40FN = 50 - 40 = 10
类别 140TP = 32FN = 40 - 32 = 8
类别 230TP = 25FN = 30 - 25 = 5

 

类别TPFP(列总减去TP)FN(行总减去TP)
040510
13288
225105
✅ 合计972323
  • Total TP = 40 + 32 + 25 = 97        #斜角线

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

  • Total FN = 10 + 8 + 5 = 23

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.80110.81110.8038
加权平均0.81190.80830.8084
微平均0.80830.80830.8083

✅ 总结

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

相关文章:

  • 亚马逊运营进阶指南:如何用AI工具赋能广告运营
  • 诊断工程师进阶篇 --- 车载诊断怎么与时俱进?
  • English Practice - Day 2
  • vite打包的简单配置
  • react状态管理库 - zustand
  • 风电自动化发电中的通信桥梁:CAN主站转MODBUS TCP网关解析
  • 【MyBatis】MyBatis与Spring和Spring Boot整合原理
  • 5种方法将联系人从iPhone转移到OnePlus
  • C++--map和set的使用
  • 仿mudou库one thread oneloop式并发服务器
  • 达梦数据库的信息查询
  • Redisson 分布式锁原理解析
  • Navicat Premium可视化工具使用查询控制台优化SQL语句
  • 商品中心—库存分桶高并发的优化文档
  • 力扣 3258 统计满足 K 约束的子字符串数量 I 题解
  • Java工具类,对象List提取某个属性为List,对象List转为对象Map其中某个属性作为Key值
  • RAG实战指南 Day 8:PDF、Word和HTML文档解析实战
  • UI自动化常见面试题
  • day08-Elasticsearch
  • 云计算领域“XaaS”是什么?
  • Python编译器(Pycharm Jupyter)
  • 第4.2节 Android App生成追溯关系
  • 【Mac 从 0 到 1 保姆级配置教程 19】- 英语学习篇-我的英语工作流分享(AI 辅助学习)
  • JavaWeb笔记07
  • 比亚迪6月销量38.25万辆,同比增长11.9%
  • window显示驱动开发—BGRA 扫描输出支持
  • 特伦斯T1节拍器,突出综合优势与用户体验
  • Python 包管理工具 uv
  • 【C语言进阶】数据是如何存储的?
  • Web后端开发-请求响应