深度学习笔记: 最详尽解释预测系统的分类指标(精确率、召回率和 F1 值)

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

预测系统的分类指标(精确率、召回率和 F1 值)

简介

让我们来谈谈预测系统的分类指标以及对精确率、召回率和F1分数的直观解释。每当我们设计预测系统时,无论是统计模型还是复杂的神经网络,我们都希望看到它的表现如何。我们希望准确了解输出的质量,不仅如此,我们还希望能够将它们与其他当代或最先进的系统进行比较,以证明我们的方法更优。

制定这样的比较并不简单。我们必须从多个角度提出质量问题,这需要一个良好的指标来量化输出的质量,使它们能够直接与其他方法进行比较,并确保输入不变性。对于输入不变性,这意味着处理特定类型数据的数据集或模型不应在任何其他类型的问题上具有偏见的优势。

输入不变性意味着无论模型处理的数据类型或问题是什么,指标都应公平地评估性能。

基本定义

在开始讨论指标之前,我们必须先了解一些基本的类别定义,我们可以将输出分组到这些类别中。

假设我们有一个系统,它对对象的类别进行预测,我们称 正例 为我们感兴趣的标签或类别。

  • 例1:检测数据集中的错误。如果我们感兴趣的是测量识别错误情况的性能,我们会将其归类为正例,正常操作为负例。
  • 例2:将项目分类为a、b、c和d四种不同类别。如果我们想测量与类别b有关的性能,那么在这种情况下,b是正例,其他任何(a、c和d)都是负例。

关键点在于,我们所有的指标都是针对我们选择定义为正例的类别。随着我们探索不同的指标,这一区别变得重要和明显,特别是对于多类别系统。

正例非常关键,因为我们将讨论的所有指标都是针对我们选择定义为正例的类别。这意味着我们计算的性能度量将取决于我们认为的正例是什么。

在多类别系统中(即有两个以上的类别),定义正例变得尤为重要和明显。每个类别都可以单独作为正例进行评估,这会影响最终的指标。

预测类别

基于这些定义,我们可以将对某些数据所做的预测进一步划分为四个有用的组:

  • 真正例(TP):当标签为正且我们预测为正时。
  • 假正例(FP):当标签为负且我们预测为正时。
  • 真负例(TN):当标签为负且我们预测为负时。
  • 假负例(FN):当标签为正且我们预测为负时。

这些值通常表示为每个类别中的预测数量或相对于所有预测的百分比。

真正例、假正例、真负例和假负例的数量可以表示为原始数字或作为系统所做总预测数的百分比。

准确率

我们将从最基本的指标开始,并正式定义什么是准确率。几乎每个人都应该对这一概念有近乎本能的理解。为了测量我们系统的准确率,我们计算正确答案的数量,并将其表示为我们给出的所有答案的一部分。更正式地,通过我们之前的定义,我们的系统的准确率是由整个预测集中的真正例和真负例的数量给出的。

Accuracy = Total Correct Guesses Total Guesses = T P + T N T P + T N + F P + F N \text{Accuracy} = \frac{\text{Total Correct Guesses}}{\text{Total Guesses}} = \frac{TP + TN}{TP + TN + FP + FN} Accuracy=Total GuessesTotal Correct Guesses=TP+TN+FP+FNTP+TN

准确率基本上告诉我们在所有的猜测中我们有多少答案是正确的,值得注意的是,这没有考虑猜测是关于正标签还是负标签。但是在测量性能时,单纯的准确率有一个明显的问题,这在处理偏差数据集时变得明显。

偏差示例

假设我们有一个数据集,其中几乎所有的标签都是负的,只有百分之一是正的。如果模型决定只输出负预测,并且不做任何正预测,它仍然会被计算为有99%的准确率。这不仅仅是一个玩具示例。在疾病检测或预测系统故障等场景中,正常情况通常会大大超过任何异常情况。即使是具有较轻偏差的数据集,其性能指标也可能以这种方式被扭曲,只是稍微更微妙一些。

指标偏差

偏差:偏差是指模型性能指标的扭曲或失真。这可能发生在指标未能准确反映模型的真实性能时,通常是由于数据集不平衡。

微妙偏差:在具有较轻不平衡的数据集中(正负案例的分布不是极端偏差但仍不平衡),准确率指标的扭曲可能不会立即显现出来。这种微妙的偏差意味着准确率指标仍然可能给出一个错误的乐观视图。

轻度不平衡数据集

在轻度不平衡的数据集中,像准确率这样的性能指标的扭曲不像在高度不平衡的情况下那样明显,因为准确率仍然相对较高,但不平衡不足以使扭曲显而易见。

为什么它不那么明显
  1. 相对较高的准确率:在轻度不平衡的数据集中,80%的准确率不会立即显示出问题,因为它看起来相当不错。
  2. 不太极端的不平衡:不平衡程度较轻,因此准确率指标看起来不像在高度不平衡的情况下那样具有误导性高。
  3. 隐藏的糟糕表现:模型未能识别正例被更多的正确识别的负例所掩盖,使得准确率的扭曲在乍一看不那么明显。

精确率

这时精确率这样的指标就派上用场了。精确率是衡量你对我们感兴趣的标签,即正例的猜测有多准确。我们通过将正确的正例猜测数量除以所有的正例猜测数量来计算它。正式地,是真正例的数量除以真正例加假正例的数量。

Precision = Correct Positive Guesses Total Positive Guesses = T P T P + F P \text{Precision} = \frac{\text{Correct Positive Guesses}}{\text{Total Positive Guesses}} = \frac{TP}{TP + FP} Precision=Total Positive GuessesCorrect Positive Guesses=TP+FPTP

优化这个指标的系统的目标是尽可能少地在猜测正标签时犯错误。回到一个系统只会猜测所有东西都是负例的例子,我们会看到精确率评分会惩罚模型,因为它未能猜测任何正标签,因此得分为零。

精确率的局限性

精确率仍然不能完全反映全貌,因为它不考虑任何负标签。一个模型可以通过非常少的正预测并在这些少数情况下是正确的来获得高精确率。例如,如果它只做一个正预测,并且该预测是正确的:

Precision = 1 1 = 1 或  100 percent \text{Precision} = \frac{1}{1} = 1 \text{ 或 } 100 \ \text{percent} Precision=11=1  100 percent

这个高精确率分数是误导性的,因为模型可能没有做足够的正预测,以在现实世界的场景中变得有用。

召回率

现在我们有了召回率,它类似于精确率的对应指标。不同的是它将负标签纳入了方程。它询问你在所有存在的正标签中找到了多少正标签,几乎直接解决了精确率的问题。这个方程归结为正确预测的正标签数量除以你正确预测的正标签数量加上你预测错误的正标签数量。

Recall = Correct Positive Guesses All Positive Labels = T P T P + F N \text{Recall} = \frac{\text{Correct Positive Guesses}}{\text{All Positive Labels}} = \frac{TP}{TP + FN} Recall=All Positive LabelsCorrect Positive Guesses=TP+FNTP

系统的目标是尽可能找到所有存在的正标签。

召回率的局限性

召回率仍然有一个问题,那就是通过自由地将任何事物标记为正例来扭曲分数。在极端情况下,只需将所有事物标记为正例就不会有任何假负例,从而获得完美的召回率分数。

Recall = TP TP + FN = 10 10 + 0 = 1 或  100 percent \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} = \frac{10}{10 + 0} = 1 \text{ 或 } 100 \ \text{percent} Recall=TP+FNTP=10+010=1  100 percent

为什么召回率是精确率的对应指标

精确率 vs. 召回率

  • 精确率:精确率衡量预测的正例中有多少实际上是正例。它关注正预测的准确性。
  • 召回率:召回率衡量实际正例中有多少被模型正确识别。它关注正预测的完整性。
    由于精确率和召回率关注模型性能的不同方面,它们被认为是对应指标。提高其中一个有时会导致另一个的下降,因此它们相互平衡。

平衡精确率和召回率

现在应该很清楚,仅仅依靠精确率和召回率都有一些严重的缺陷,但事实上,一种指标防止了对另一种指标的作弊。为了获得100%的召回率,将导致精确率为零,反之亦然。通过这种方式,这两个指标相互补充,提出了一个问题:我们是否可以设计一个系统同时优化这两个分数。我们希望将预测的质量和完整性结合成一个分数。

虽然精确率关注正预测的正确性,但召回率关注正预测的完整性。

精确率和召回率之间的权衡:

当你调整将实例分类为正例的阈值时,会对精确率和召回率产生影响,通常是相反的方向:

提高精确率:

为了提高精确率,你可能会设置更高的阈值来将实例分类为正例。这意味着模型在标记正例时会更加保守,从而减少假正例(FP)。然而,这种保守性也意味着它可能会错过一些真正例(TP),从而降低召回率。
示例: 一个分类电子邮件为垃圾邮件的模型可能非常保守,只有在非常确定时才将电子邮件标记为垃圾邮件。这减少了非垃圾邮件被错误标记为垃圾邮件的数量(高精确率),但可能会错过一些实际的垃圾邮件(低召回率)。

提高召回率:

为了提高召回率,你可能会设置更低的阈值来将实例分类为正例。这使得模型在标记正例时更加宽松,从而减少假负例(FN)。然而,这种宽松性增加了将非正例标记为正例的可能性,从而降低精确率。
示例: 同样的垃圾邮件分类器可能会更宽松地标记电子邮件为垃圾邮件,捕捉更多的实际垃圾邮件(高召回率),但也会错误地标记更多非垃圾邮件(低精确率)。

F1分数

这就是F1分数的作用。F1分数定义为精确率和召回率的调和平均数。该分数基本上询问预测的质量有多好以及我们从数据集中预测标签的完整性。重要的是,F1分数并不简单地使用算术平均数来组合分数。事实上,这对于我们之前讨论的所谓作弊情况会是相当不利的。调和平均数将分数偏向两个组成分数中较低的一个,这实际上惩罚了精确率和召回率彼此之间的严重不一致,并正确反映了当它们中的任何一个接近零时的情况。

F1 = 2 ⋅ Precision ⋅ Recall Precision + Recall = 2 ⋅ T P 2 ⋅ T P + F P + F N \text{F1} = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} = 2 \cdot \frac{TP}{2 \cdot TP + FP + FN} F1=2Precision+RecallPrecisionRecall=22TP+FP+FNTP

为什么F1分数不使用算术平均数?

考虑以下场景:

  • 数据集: 10个正例和90个负例
  • 模型预测: 预测所有为正例

结果预测为:

  • 真正例(TP): 10
  • 假正例(FP): 90
  • 真负例(TN): 0
  • 假负例(FN): 0

计算精确率和召回率:

  • 精确率: T P T P + F P = 10 10 + 90 = 0.1 \frac{TP}{TP + FP} = \frac{10}{10 + 90} = 0.1 TP+FPTP=10+9010=0.1
  • 召回率: T P T P + F N = 10 10 + 0 = 1 \frac{TP}{TP + FN} = \frac{10}{10 + 0} = 1 TP+FNTP=10+010=1

精确率和召回率的算术平均数为:
0.1 + 1 2 = 0.55 \frac{0.1 + 1}{2} = 0.55 20.1+1=0.55

这个结果误导性地表明了中等表现。然而,作为精确率和召回率的调和平均数,F1分数计算如下:
F 1 = 2 × 0.1 × 1 0.1 + 1 ≈ 0.18 F1 = 2 \times \frac{0.1 \times 1}{0.1 + 1} \approx 0.18 F1=2×0.1+10.1×10.18

这表明F1分数通过惩罚精确率和召回率之间的极端不平衡,更准确地反映了模型的糟糕表现。

结论

F1分数是我们比较系统的最常用指标之一,在大多数情况下,它是衡量模型性能的良好指标。然而,在一些情况下,尤其是处理多类别系统时,它并不那么适用,因为对于每个不同类别的性能同样重要。此外,该指标在计算中不包含真负例,因为精确率和召回率分别不包括它们。

通常在二分类问题中,一个类别是主要关注的。这通常是正类,例如检测欺诈、识别疾病或识别垃圾邮件。示例:在疾病检测中,主要关注的是识别疾病病例(正类)。错过一个疾病病例(假负例)通常比错误地将一个健康人识别为疾病患者(假正例)更为严重。

在多类别分类中,有两个以上的类别,并且每个类别的性能同样重要。示例:在图像分类任务中,类别如猫、狗和鸟,将猫错误分类为狗与将狗错误分类为鸟同样重要。

参考资料:

  • 在YouTube上观看视频

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

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

相关文章

Spring MVC的高级功能——异常处理(一)简单异常处理器

一、HandlerExceptionResolver接口 如果希望对Spring MVC中所有异常进行统一处理,可以使用Spring MVC提供的异常处理器HandlerExceptionResolver接口。Spring MVC内部提供了HandlerExceptionResolver的实现类SimpleMappingExceptionResolver。它实现了简单的异常处理…

对于复杂的网页布局,如多列布局和网格布局,CSS 有哪些最佳实践和技巧?

对于复杂的网页布局,如多列布局和网格布局,以下是一些CSS的最佳实践和技巧: 使用Flexbox或CSS Grid布局:Flexbox和CSS Grid是两个强大的CSS布局模型,可用于实现复杂的网页布局。Flexbox适用于单行或单列布局&#xff0…

SpringSecurity6 | 基于数据库实现登录认证

SpringSecurity6 | 基于数据库认证 ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringSecurity6 ✨特色专栏: MySQL学习 🥭本文内容: SpringSecurity6 | 基于数据库实现登…

数据资产的价值变现及管理规划(AMT企源)

从数据资源到数据资产之数据资产的价值变现及管理规划 题记 本文旨在探讨数据资产发展途径、数据产权及价值变现的服务流程和路径,并对数据资产管理平台框架、数据资产管理实施规划做出初步解读,以期为数据资产管理提供有益的思路和方案。 本次推出《从…

09 - Python图形用户界面和游戏开发

图形用户界面和游戏开发 基于tkinter模块的GUI GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter)&…

【linux】虚拟机安装 BCLinux-R8-U4-Server-x86_64

目录 一、概述 1.1移动云Linux系统订阅服务 CLS 1.2 大云天元操作系统BC-Linux 二、安装 一、概述 1.1移动云Linux系统订阅服务 CLS 移动云Linux系统订阅服务 CLS (Cloud Linux Service)为使用BC-Linux操作系统的用户提供标准维保服务以及高级技术支…

62、Flink自定义 SimpleAccumulator 代码示例

1、概述 需要实现 SimpleAccumulator 接口,并重写 add,getLocalValue,resetLocal,merge,clone 等方法。 2、代码示例 import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; im…

mysql-5.6.26-winx64免安装版本

mysql为什么要使用免安装 MySQL 提供免安装版本主要有以下几个原因和优势: 便捷性:用户无需经历安装过程,直接解压即可使用。这对于需要快速部署环境或者在不支持安装权限的系统上使用MySQL非常有用。灵活性:免安装版允许用户将…

actual combat 32 —— RabbitMQ

1. 五种模式 RabbitMQ有五种工作模式,分别是简单模式、工作模式、发布订阅模式、路由模式和主题模式 简单模式(Simple Mode):这种模式包含一个生产者和一个消费者。生产者将消息发送到队列,消费者从队列中获取消息。…

Optional类方法

Optional类 简介方法empty()方法of(T value)ofNullable(T value)filter(Predicate<? super T> predicate)get()ifPresent(Consumer<? super T> consumer)isPresent()map(Function<? super T,? extends U> mapper)orElse(T other)orElseGet(Supplier<?…

撸包看广告小游戏app开发现有案例搭建

开发一个撸包看广告小游戏涉及多个关键步骤和考虑因素。以下是一个大致的开发流程&#xff1a; 市场调研与定位&#xff1a; 深入了解目标用户群体的需求和偏好&#xff0c;以及市场上类似游戏的状况。 确定游戏的目标受众和定位&#xff0c;如休闲益智、动作冒险等类型。 游…

基于Chrome扩展的浏览器可信事件与网页离线PDF导出

基于Chrome扩展的浏览器可信事件与网页离线PDF导出 Chrome扩展是一种可以在浏览器中添加新功能和修改浏览器行为的软件程序&#xff0c;我们可以基于Manifest规范的API实现对于浏览器和Web页面在一定程度上的修改&#xff0c;例如广告拦截、代理控制等。Chrome DevTools Proto…

React 高频面试题1(答案和题目都是根据讯飞星火写的)

1. 解释React中的虚拟dom&#xff0c;并说明它是如何工作的。 虚拟dom是介于数据与真实dom之间的抽象层&#xff0c;是一个轻量级的JavaScript对象。react组件的状态或属性发生改变时会重新渲染组件&#xff0c;生成新的虚拟dom。然后react会比较新旧两个dom&#xff08;这个过…

LeetCode 子集

原题链接78. 子集 - 力扣&#xff08;LeetCode&#xff09; 这是一道暴力搜索问题参考大佬们的题解&#xff0c;对这类题目做出一下总结 1.确定递归参数变量 2.递归结束条件 3.做出选择&#xff0c;递归调用进入下一层 4.回溯&#xff0c;返回到递归前的状态 要完成前面这…

.net 百度翻译接口核心类

百度翻译api &#xff1a;http://developer.baidu.com/wiki/index.php?title帮助文档首页/百度翻译/翻译AP 核心翻译类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Newtonsoft.Json; using System.Net; using System.I…

最新扣子(Coze)实战案例:图像流工具之创建一个精美的LOGO,完全免费教程

&#x1f9d9;‍♂️ 大家好&#xff0c;我是斜杠君&#xff0c;手把手教你搭建扣子AI应用。 &#x1f4dc; 本教程是《AI应用开发系列教程之扣子(Coze)实战教程》&#xff0c;完全免费学习。 &#x1f440; 关注斜杠君&#xff0c;可获取完整版教程。&#x1f44d;&#x1f3f…

03.音频处理流程

一、直播客户端的处理流程 共享端&#xff1a;音视频采集------>音视频编码------ | 传输 观看端&#xff1a;音视频渲染<------音视频解码------ 二、音频数据的流转 1、PCM PCM&#xff08;Pulse Code Modulation&#xff09;是一种未压缩的数字音频格式&#xff0c;…

商家团购app微信小程序模板

手机微信商家团购小程序页面&#xff0c;商家订餐外卖小程序前端模板下载。包含&#xff1a;团购主页、购物车订餐页面、我的订单、个人主页等。 商家团购app微信小程序模板

算法:哈希表

目录 题目一&#xff1a;两数之和 题目二&#xff1a;判定是否互为字符重排 题目三&#xff1a;存在重复元素I 题目四&#xff1a;存在重复元素II 题目五&#xff1a;字母异位词分组 关于哈希表 哈希表就是存储数据的容器 哈希表的优势是&#xff1a;快速查找某个元素O(…

Hive On Spark语法

内层对象定义之特殊数据类型 Array DROP TABLE IF EXISTS test_table_datatype_array; CREATE TABLE test_table_datatype_array (ids array<INT> ) LOCATION test/test_table_datatype_array;SELECTnames,names[1]array(names[2],names[3])names[5],names[-1],array_c…