【NLP】10. 机器学习模型性能评估指标(含多类别情况), ROC,PRC

机器学习模型性能评估指标(含多类别情况)

1. 模型评估指标简介

在机器学习中,模型的性能评估非常重要。常用的模型评估指标有:

  • 准确率(Accuracy)
  • 精度(Precision)
  • 召回率(Recall)
  • F-Score
  • Micro Average 和 Macro Average

这些指标能够帮助我们了解模型在预测中的表现,尤其是在不同类别不平衡的情况下,选择适合的评估标准非常重要。

2. 常用的评估指标

2.1 准确率(Accuracy)

准确率是正确预测的样本占所有样本的比例,计算公式为:
Accuracy = T P + T N T P + T N + F P + F N \text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN} Accuracy=TP+TN+FP+FNTP+TN
其中:

  • TP:真正例(True Positive)
  • TN:真反例(True Negative)
  • FP:假正例(False Positive)
  • FN:假反例(False Negative)

准确率适用于类别分布比较均衡的情况,但在类别不平衡的情况下,可能会导致误导。

2.2 精度(Precision)

精度表示预测为正类的样本中,实际为正类的比例,计算公式为:
Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP
精度可以帮助我们了解预测为正的样本有多少是准确的。

2.3 召回率(Recall)

召回率表示实际为正类的样本中,被正确预测为正类的比例,计算公式为:
Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP
召回率能够告诉我们有多少正类被模型捕获。

2.4 F-Score

F-Score 是精度和召回率的调和平均值,计算公式为:

F − S c o r e = 2 × Precision × Recall Precision + Recall F-Score = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} FScore=2×Precision+RecallPrecision×Recall
F-Score 综合了精度和召回率,是常用的评估指标,尤其在不平衡分类问题中尤为重要。


3. 多类别评估

当我们面临多类别问题时,计算方式稍微复杂一些。常用的评估方式包括 Micro AverageMacro Average

3.1 多类别混淆矩阵

在多类别分类问题中,混淆矩阵会扩展为一个矩阵,其中每一行表示真实类别,每一列表示预测类别。举个例子,如果有四个类别(0, 1, 2, 3),混淆矩阵如下所示:

类别预测为 0预测为 1预测为 2预测为 3
实际为 050532
实际为 1154023
实际为 284605
实际为 334530

我们可以从这个混淆矩阵中计算出每个类别的 TP, FP, FN, TN

3.2 每个类别的指标

例如,类别 0 的 TP, FP, FN, TN 计算如下:

  • TP: 50(实际为 0 且预测为 0)
  • FP: 15 + 8 + 3 = 26(实际不是 0,但预测为 0)
  • FN: 5 + 3 + 2 = 10(实际为 0,但预测为其他类别)
  • TN: 所有其他未预测为 0 的项:40 + 60 + 30 + 3 + 4 + 5 = 142

类似地,我们可以计算其他类别的指标。

3.3 Precision, Recall 和 F-Score 的计算

接下来,我们根据每个类别的 TP, FP, FN 来计算 Precision, RecallF-Score

类别TPFPFNPrecisionRecallF-Score
05026100.6570.8330.740
14017200.7010.6670.684
26012140.8330.8110.822
33012100.7140.7500.731
3.4 Micro Average 和 Macro Average
  • Micro Average:先汇总所有类别的 TP, FP, FN,然后计算 Precision, RecallF-Score
  • Macro Average:对每个类别的 Precision, RecallF-Score 进行平均。

Micro AverageMacro Average 的计算可以帮助我们从整体和类别均值两个角度评估模型。

Micro Average
  • Micro TP = 50+40+60+30=180
  • Micro FP = 26+17+12+12=67
  • Micro FN = 10+20+14+10=54

Micro Precision =
180 180 + 67 = 0.729 \frac{180}{180 + 67} = 0.729 180+67180=0.729
Micro Recall =
180 180 + 54 = 0.769 \frac{180}{180 + 54} = 0.769 180+54180=0.769
Micro F-Score =
2 × 0.729 × 0.769 0.729 + 0.769 = 0.748 2 \times \frac{0.729 \times 0.769}{0.729 + 0.769} = 0.748 2×0.729+0.7690.729×0.769=0.748

Macro Average

Macro Precision =
0.657 + 0.701 + 0.833 + 0.714 4 = 0.751 \frac{0.657 + 0.701 + 0.833 + 0.714}{4} = 0.751 40.657+0.701+0.833+0.714=0.751

Macro Recall =
0.833 + 0.667 + 0.811 + 0.750 4 = 0.765 \frac{0.833 + 0.667 + 0.811 + 0.750}{4} = 0.765 40.833+0.667+0.811+0.750=0.765

Macro F-Score =
0.740 + 0.684 + 0.822 + 0.731 4 = 0.744 \frac{0.740 + 0.684 + 0.822 + 0.731}{4} = 0.744 40.740+0.684+0.822+0.731=0.744


4. 总结

指标类别 0类别 1类别 2类别 3Micro AverageMacro Average
Precision0.6570.7010.8330.7140.7290.751
Recall0.8330.6670.8110.7500.7690.765
F-Score0.7400.6840.8220.7310.7480.744
  • 准确率(Accuracy):适用于类别分布较为平衡的情况。
  • 精度(Precision):反映了模型对正类预测的准确性。
  • 召回率(Recall):反映了模型捕获到正类的能力。
  • F-Score:综合了精度和召回率,是综合性评估指标。
  • Micro Average:考虑每个样本的贡献,适合不平衡数据集。
  • Macro Average:对各类别的表现取平均,适合类别均衡时的综合评估。

5. 应用场景

这些评估指标广泛应用于分类问题,尤其是当数据类别不平衡时,F-ScoreMacro Average 常常比 Accuracy 更具参考价值。

6. 任务相关性对评估指标选择的影响

不同任务对 False Positive (FP)False Negative (FN) 的容忍度不同,因此在选择评估指标时,必须考虑任务的目标和后果。

6.1 垃圾邮件检测(Spam Detection)

在垃圾邮件检测任务中:

  • False Positive (FP):将一个真实邮件误判为垃圾邮件。这个错误的影响比较大,因为用户可能会错过重要的邮件。
  • False Negative (FN):将垃圾邮件误判为正常邮件。这个错误影响较小,用户可以手动删除多余的垃圾邮件。

模型评估建议

  • 对于垃圾邮件检测任务,False Positives (FP) 更为严重,因为用户宁愿删除一些额外的垃圾邮件,也不希望错过重要邮件。
  • 因此,在这种情况下,我们应该更加关注 Precision,即我们预测为正的邮件中,有多少是真正的垃圾邮件。
6.2 法院文件提交(Providing Document in Court)

在法庭文件提交任务中:

  • False Positive (FP):错误地提交了不相关的文件。这个错误的后果较小,可能仅会导致一些额外的工作。
  • False Negative (FN):漏掉了需要提交的重要文件。这个错误的后果非常严重,可能会导致案件失败或法律后果。

模型评估建议

  • 对于这种任务,False Negatives (FN) 更为严重,因为漏掉重要文件可能会对案件产生灾难性的后果。
  • 因此,我们应该更加关注 Recall,即模型能识别出多少真实需要提交的文件。
6.3 任务翻转的影响

如果任务发生翻转,评估指标的优先级也可能发生变化。例如:

  • 如果将“垃圾邮件检测”任务翻转为“相关邮件检测”任务,目标是找出所有与用户相关的重要邮件,而不仅仅是过滤垃圾邮件,那么 Recall 变得更加重要。
  • 在这种情况下,漏掉一个重要邮件(False Negative)可能比误将一些不重要邮件标记为重要(False Positive)更加严重。

7. ROC 曲线与 Precision-Recall 曲线

7.1 什么是 ROC 曲线?

7.1.1 ROC 曲线的定义

ROC(Receiver Operating Characteristic)曲线用于评估分类模型在不同阈值下的表现。它描绘了模型的 True Positive Rate (TPR)False Positive Rate (FPR) 之间的关系。

  • TPR(True Positive Rate),即 Recall:表示模型在所有实际为正类的样本中预测正确的比例。
  • FPR(False Positive Rate):表示模型在所有实际为负类的样本中错误预测为正类的比例,计算公式为:

FPR=FPFP+TNFPR = \frac{FP}{FP + TN}FPR=FP+TNFP

7.1.2 ROC 曲线的含义

  • TPR(True Positive Rate) 对应的是 Recall
  • FPR(False Positive Rate) 对应的是 1 - Specificity,其中 Specificity 是指模型在所有实际为负类的样本中预测正确的比例。

通过绘制不同阈值下的 TPRFPR,我们可以得到 ROC 曲线。ROC 曲线的理想情况是 TPR 为 1,FPR 为 0,这意味着模型的分类能力完美。

7.1.3 AUC(Area Under Curve)

AUC 是 ROC 曲线下的面积,值越接近 1,表示模型越好。AUC 值为 0.5 表示模型没有任何区分能力,相当于随机猜测。


7.2 什么是 Precision-Recall 曲线?

ROC 曲线类似,Precision-Recall 曲线也是评估模型性能的一种方法,但其更加关注正类样本的表现。当数据集是高度不平衡时,Precision-Recall 曲线往往比 ROC 曲线更能准确反映模型的性能。

7.2.1 Precision-Recall 曲线的定义

  • Precision-Recall 曲线 描绘了 PrecisionRecall 在不同阈值下的变化。我们通过调整分类阈值来计算不同阈值下的 PrecisionRecall,然后绘制出曲线。

7.2.2 Precision-Recall 曲线的作用

  • Precision-Recall 曲线 可以帮助我们理解模型在正类样本的分类表现,尤其是当正类样本数量较少时。
  • 如果 PrecisionRecall 都较高,则说明模型在正类预测时既准确又完整。

7.3 如何计算 Precision 和 Recall 并绘制 Precision-Recall 曲线

7.3.1 准备数据

假设我们有以下数据集,包含了每个样本的真实标签和模型输出的预测概率:

样本编号真实标签 (y_true)模型预测概率 (y_scores)
110.9
200.7
310.8
400.4
510.85

7.3.2 选择不同阈值并计算 Precision 和 Recall

根据预测概率排序:

样本编号真实标签 (y_true)模型预测概率 (y_scores)
110.9
310.8
510.85
200.7
400.4

选择阈值:0.9, 0.8, 0.7, 0.5,分别计算 Precision 和 Recall。

阈值 = 0.9
  • 预测为正类的样本:样本 1
  • TP = 1, FP = 0, FN = 2, TN = 2
  • Precision = 1, Recall = 0.33
阈值 = 0.8
  • 预测为正类的样本:样本 1, 3, 5
  • TP = 3, FP = 1, FN = 0, TN = 1
  • Precision = 0.75, Recall = 1
阈值 = 0.7
  • 预测为正类的样本:样本 1, 2, 3, 5
  • TP = 3, FP = 1, FN = 0, TN = 1
  • Precision = 0.75, Recall = 1
阈值 = 0.5
  • 预测为正类的样本:样本 1, 2, 3, 4, 5
  • TP = 3, FP = 2, FN = 0, TN = 0
  • Precision = 0.6, Recall = 1

7.3.3 绘制 Precision-Recall 曲线

通过计算不同阈值下的 PrecisionRecall,我们可以绘制 Precision-Recall 曲线。以下是不同阈值下的 PrecisionRecall 的数据:

阈值PrecisionRecall
0.910.33
0.80.751
0.70.751
0.50.61

使用 matplotlib 绘制 Precision-Recall 曲线:

import matplotlib.pyplot as plt# Precision 和 Recall 的值
precision = [1, 0.75, 0.75, 0.6]
recall = [0.33, 1, 1, 1]
thresholds = [0.9, 0.8, 0.7, 0.5]# 绘制 Precision-Recall 曲线
plt.plot(recall, precision, marker='o', color='b')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.grid(True)
plt.show()

7.4 总结

7.4.1 ROC 曲线与 AUC

  • ROC 曲线 提供了模型的 TPRFPR 之间的关系,通过不同阈值下的分类性能展示模型的表现。
  • AUC(Area Under Curve)表示 ROC 曲线下的面积,AUC 值越高,模型的性能越好。

7.4.2 Precision-Recall 曲线(PRC)

  • Precision-Recall 曲线 聚焦于正类的分类表现,尤其在数据集不平衡时,提供了对模型性能的更好评估。
  • 精度(Precision)和召回率(Recall)是关键的评估指标,二者可以通过调整阈值来平衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34418.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ssm的宠物医院信息管理系统(全套)

一、系统架构 前端:html | layui | vue | element-ui 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven | tomcat | idea | nodejs 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页…

UE小:UE5.5 PixelStreamingInfrastructure 使用时注意事项

1、鼠标默认显示 player.ts中的Config中添加HoveringMouse:true 然后运行typescript\package.json中的"build":npx webpack --config webpack.prod.js

iOS底层原理系列01-iOS系统架构概览-从硬件到应用层

1. 系统层级结构 iOS系统架构采用分层设计模式,自底向上可分为五个主要层级,每层都有其特定的功能职责和技术组件。这种层级化结构不仅使系统更加模块化,同时也提供了清晰的技术抽象和隔离机制。 1.1 Darwin层:XNU内核、BSD、驱动…

Ubuntu从源代码编译安装QT

1. 下载源码 wget https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz tar xf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.22. 安装依赖库 sudo apt update sudo apt install build-essential libgl1-mesa-d…

深度学习基础:线性代数本质4——矩阵乘法

两个矩阵相乘的意义就是复合变换 1. 复合变换 例如先进行旋转变换再进行剪切变换,这很明显是两个变换,但是从总体上看可以看作是一个复合变换,是旋转和剪切作用的总和。 和其他线性变换一样,我们也可以通过记录变换后的 i j 来实…

前端技巧第五期JavaScript函数

函数定义 1. 传统定义方式 // 1. 函数声明(存在提升)function sum(a, b) { return a b;} // 2. 函数表达式const multiply function(a, b) { return a * b;}; // 3. 构造函数(不推荐)const div new Function(a, b, return …

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中,虽然功能相对Excel有所简化,但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤: 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉,进入“钉钉在线表格”应用。 打开你需要操作…

王者荣耀道具页面爬虫(json格式数据)

首先这个和英雄页面是不一样的,英雄页面的图片链接是直接放在源代码里面的,直接就可以请求到,但是这个源代码里面是没有的 虽然在检查页面能够搜索到,但是应该是动态加载的,源码中搜不到该链接 然后就去看看是不是某…

基于Python+SQLite实现(Web)验室设备管理系统

实验室设备管理系统 应用背景 为方便实验室进行设备管理,某大学拟开发实验室设备管理系统 来管理所有实验室里的各种设备。系统可实现管理员登录,查看现有的所有设备, 增加设备等功能。 开发环境 Mac OSPyCharm IDEPython3Flask&#xff…

让双向链表不在云里雾里

又来博客留下我的足迹了,哈哈哈,这次是对于双向链表的理解 目录 创建双向链表: 申请结点: 双向链表初始化: 双向链表插入结点: 双向链表删除结点: 双向链表的打印: 双向链表…

基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别

【由于之前学习MyBatis的时候是跟着视频敲的纯MyBatis项目,以至于在突然看到别人在SpringBoot项目里搭建MyBatis方式的时候很懵比…特此文字形式记录一下区别(应该还有好多种其他方式是我不知道的,主要应该就是要知道关键的流程步骤&#xff…

UE4-UE5虚幻引擎,前置学习一--Console日志输出经常崩溃,有什么好的解决办法

有些差异 这么牛逼的引擎,居然有这种入门级别的问题,一触发清理,大概率(80%)会崩溃 无论虚幻5还是UE4都有这个问题,挺烦人的 实在忍不了了,这次,今天 就想问问有什么好的处理方法么?&#x…

学习 springboot -Bean 管理(注册条件)

前言 上一篇 博客 :学习springboot-Bean管理(Bean 注册,Bean 扫描)-CSDN博客我们了解了 bean 注册需要使用到 Bean 和Import 将第三方jar 包的对象 注入到ioc 容器 如下图所示 通过图片,可以看到Country 对象和Province 对象已…

【云原生技术】编排与容器的技术演进之路

一、编排与容器的技术演进之路 1.1 DockerClient 此时 K8s 只是编排领域的一个选择,而 Docker 此时一家独大,所以 K8s 的客户端只 是作为 Docker 的客户端来调用 Docker 引擎来完成服务。 1.2 RUNC&Shim OCI催生 runcrunc,剥离 Docke…

安卓投屏到mac操作

1. 安装 brew install scrcpy2. 打开手机usb调试 3. 安装 brew install android-platform-tools 4. 重启终端,运行命令 adb devices scrcpy 参考:https://zhuanlan.zhihu.com/p/682491037https://zhuanlan.zhihu.com/p/682491037

c#知识点补充

1.静态类无法被继承 2.线程join方法的使用 作用就是让多个线程,按顺序执行 3.线程里lock的作用 保证每次只执行一次 4.线程池的使用

3分钟复现 Manus 超强开源项目 OpenManus

文章目录 前言什么是 OpenManus构建方式环境准备克隆代码仓库安装依赖配置 LLM API运行 OpenManus 效果演示总结个人简介 前言 近期人工智能领域迎来了一位备受瞩目的新星——Manus。Manus 能够独立执行复杂的现实任务,无需人工干预。由于限制原因大部分人无法体验…

电路原理(电容 集成电路NE555)

电容 1.特性:充放电,隔直流,通交流 2.电容是通过聚集正负电荷来存储电能的 3.电容充放电过程可等效为导通回路 4.多电容并联可以把容量叠加,但是多电容串联就不会,只会叠加电容的耐压值。 6.电容充放电时相当于通路&a…

【redis】hash基本命令和内部编码

文章目录 表示形式命令HSET 和 HGET HEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT命令小结内部编码 表示形式 Redis 自身已经是键值对结构了 Redis 自身的键值对就是通过哈希的方式来组织的 把 key 这一层组织完成之后,到了 value 这一层&…

学习路之TP6 --重写vendor目录下的文件(新建命令)

[TOC](学习路之TP6 --重写vendor目录下的文件(新建命令)) 一、新建命令文件 php think make:command CustomWorker二、修改 复制vendor\topthink\think-worker\src\command\Server.php 内容到app\command\CustomWorker.php 修改继承类:class CustomWorker exten…