【机器学习】原理+实例, 一文掌握 精确率、召回率与F1分数,再也不迷路。

精确率、召回率与F1分数

  • 1、引言
  • 2、定义
    • 2.1 精确率
    • 2.2 召回率
    • 2.3 F1分数
    • 2.4 二分类任务
    • 2.5 代码示例
  • 3、总结

1、引言

小屌丝:鱼哥,你在给我详细的唠叨唠叨 精确率,召回率和F1分数。
小鱼:这…这不是机器学习基本知识吗
小屌丝:不就是基础没打好,所以才让你在给我唠叨一次。
小鱼:感情我这是循环播放器啊
小屌丝:鱼哥,那你就在播放一次。
小鱼:那可没时间
小屌丝:播放完,我们去…
小鱼:去哪里?干啥去?我可是正经人。
小屌丝:… 我也没说你不是正经人哦
小鱼:这… 还差不多。 我可不是为了那几张门票的!
小屌丝: 对对对
在这里插入图片描述

小鱼:看样子还不服气…
小屌丝:必须服气,你说的都对。
小鱼:这还差不多。

2、定义

2.1 精确率

精确率衡量的是被预测为正例的样本中实际为正例的比例。

它关注的是在模型预测为正例的样本中,有多少是真正的正例。

计算公式为:

Precision = TP TP + FP \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} Precision=TP+FPTP

其中:

  • FP(False Positives):假正例,即实际为负例但被模型预测为正例的样本数。
  • 精确度越高,意味着模型预测为正例的样本中,误报的样本越少。

2.2 召回率

召回率也称为查全率,它衡量的是实际为正例的样本中被预测为正例的比例。换句话说,召回率关注的是在所有真正例(True Positives, TP)中,模型找出了多少真正例。

计算公式为:
Recall = TP TP + FN \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} Recall=TP+FNTP
其中:

  • TP(True Positives):真正例,即实际为正例且被模型预测为正例的样本数。
  • FN(False Negatives):假反例,即实际为正例但被模型预测为负例的样本数。

2.3 F1分数

F1分数是召回率和精确度的调和平均数,用于综合评估模型的性能。

它旨在平衡召回率和精确度,因为有时单独优化其中一个指标可能会导致另一个指标的性能下降。

计算公式为:
F1 Score = 2 × Precision × Recall Precision + Recall \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1 Score=2×Precision+RecallPrecision×Recall

F1分数越高,意味着模型在召回率和精确度上都表现良好,综合性能较优

在这里插入图片描述

2.4 二分类任务

在机器学习的分类任务中,特别是二分类任务中,TP、FP、FN、TN 是四个常用的指标,用于描述模型预测结果与实际标签之间的关系

这四个指标的具体含义如下:

  • 真正例 (True Positive, TP):模型预测为正例,且实际标签也为正例的样本数。这些样本被模型正确地识别为正例。

  • 假正例 (False Positive, FP):模型预测为正例,但实际标签为负例的样本数。这些样本被模型错误地识别为正例,也称为误报。

  • 真反例 (True Negative, TN):模型预测为负例,且实际标签也为负例的样本数。这些样本被模型正确地识别为负例。

  • 假反例 (False Negative, FN):模型预测为负例,但实际标签为正例的样本数。这些样本被模型错误地识别为负例,也称为漏报。

这四个指标构成了一个混淆矩阵 (Confusion Matrix),它是评估分类模型性能的一种常用工具。

混淆矩阵可以直观地显示模型分类的详细结果,帮助分析模型的错误类型。

举个栗子
在这里插入图片描述

样本预测实际
1正例正例
2负例负例
3正例负例
4负例正例

在这个例子中:

  • 样本1是真正例(TP),因为模型预测为正例,实际也是正例。
  • 样本2是真反例(TN),因为模型预测为负例,实际也是负例。
  • 样本3是假正例(FP),因为模型预测为正例,但实际是负例。
  • 样本4是假反例(FN),因为模型预测为负例,但实际是正例。

计算召回率、精确度和F1分数:

  • 召回率 = TP / (TP + FN) = 1 / (1 + 1) = 0.5
  • 精确度 = TP / (TP + FP) = 1 / (1 + 1) = 0.5
  • F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率) = 2 * (0.5 * 0.5) / (0.5 + 0.5) = 0.5

2.5 代码示例

# -*- coding:utf-8 -*-
# @Time   : 2024-01-21
# @Author : Carl_DJ

'''
实现功能:
    基于二分类任务,使用scikit-learn库来计算并展示召回率、精确度和F1分数

'''

from sklearn.metrics import precision_score, recall_score, f1_score, confusion_matrix, accuracy_score  
  
# 假设我们有以下预测结果和实际标签  
y_true = [0, 1, 1, 0, 1, 1, 0, 0, 1, 1]  # 实际标签  
y_pred = [0, 1, 0, 0, 0, 1, 1, 0, 1, 1]  # 模型预测结果  
  
# 计算混淆矩阵  
cm = confusion_matrix(y_true, y_pred)  
print("混淆矩阵:")  
print(cm)  
  
# 计算召回率  
recall = recall_score(y_true, y_pred)  
print(f"召回率 (Recall): {recall}")  
  
# 计算精确度  
precision = precision_score(y_true, y_pred)  
print(f"精确度 (Precision): {precision}")  
  
# 计算F1分数  
f1 = f1_score(y_true, y_pred)  
print(f"F1分数 (F1 Score): {f1}")  
  
# 计算准确率  
accuracy = accuracy_score(y_true, y_pred)  
print(f"准确率 (Accuracy): {accuracy}")  
  
# 解释混淆矩阵  
tp, fp, fn, tn = cm.ravel()  
print(f"真正例 (TP): {tp}")  
print(f"假正例 (FP): {fp}")  
print(f"假反例 (FN): {fn}")  
print(f"真反例 (TN): {tn}")  
  
# 根据混淆矩阵解释召回率和精确度  
print(f"召回率 = TP / (TP + FN) = {tp} / ({tp + fn}) = {recall}")  
print(f"精确度 = TP / (TP + FP) = {tp} / ({tp + fp}) = {precision}")  
  
# F1分数的公式  
print(f"F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率) = 2 * ({precision} * {recall}) / ({precision} + {recall}) = {f1}")

运行结果

混淆矩阵:  
 [[3 1]  
 [1 5]]  
召回率 (Recall): 0.8333333333333334  
精确度 (Precision): 0.8333333333333334  
F1分数 (F1 Score): 0.8333333333333334  
准确率 (Accuracy): 0.8  
真正例 (TP): 5  
假正例 (FP): 1  
假反例 (FN): 1  
真反例 (TN): 3  
召回率 = TP / (TP + FN) = 5 / (5 + 1) = 0.8333333333333334  
精确度 = TP / (TP + FP) = 5 / (5 + 1) = 0.8333333333333334  
F1分数 = 2 * (精确度 * 召回率) / (精确度 + 召回率) = 2 * (0.8333333333333334 * 0.8333333333333334) / (0.8333333333333334 + 0.8333333333333334) = 0.8333333333333334

3、总结

我是小鱼

  • CSDN 博客专家
  • 阿里云 专家博主
  • 51CTO博客专家
  • 企业认证金牌面试官
  • 多个名企认证&特邀讲师等
  • 名企签约职场面试培训、职场规划师
  • 多个国内主流技术社区的认证专家博主
  • 多款主流产品(阿里云等)测评一、二等奖获得者

关注小鱼,学习【机器学习】&【深度学习】知识,不再迷路。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双亲委派机制总结

回顾了一下双亲委派机制,在这记录记录,下一篇会基于打破双亲委派机制来更新 1. 类加载: 多个java文件经过编译打包后生成可运行jar包,最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…

Digital Image processing (DIP)

Camera FOV: Filed of view DOV: deep of view 景深 被F f/D 衡量,f 是焦距,D 是光圈大小。 当确定好了景深后,如何光线较暗,则需要补光,或者适当延长曝光时间(快门) 分辨率、像素尺寸&…

小学生古诗文大会往届真题测一测和独家详细解析(题目来自官方)

新学期开学一眨眼已经过了一个多月了,有家长朋友开始关心2024年上海市小学生古诗文大会什么时候开始?如何准备小学生古诗文大会?如何激发孩子学习古诗词的兴趣?如何提高小学古诗词和古诗文大会的学习成绩?... 最近&…

Deepin中定义 ll 文件查看命令

Deepin中定义 ll 文件查看命令 一、概述1. 在终端中使用2. 配置本用户使用 一、概述 在Ubuntu中习惯使用 ll 命令作为查看文件系统数据,在Deepin中无法使用此命令。我们可以用ls命令去组装一个ll命令。 1. 在终端中使用 我们如果只使用一次,我们可以用…

流量调度平台:优化资源配置,提升用户体验

随着互联网和移动互联网的快速发展,流量调度平台作为一种关键的技术解决方案,正成为各行业提高资源利用率、优化用户体验的重要工具。本文将深入探讨流量调度平台的意义、特点以及在不同领域的应用场景。 ### 什么是流量调度平台? 流量调度…

俚语加密漫谈

俚语加密是一种古老而有效的通信方式,将特定词语或短语在群体内赋予特殊含义,从而隐藏真实信息。类似于方言,它在历史上的应用不可忽视。随着计算机时代的到来,现代密码学通过数学运算编织密语,使得加密变得更加高深莫…

Rust编程(二)语法和数据类型

编程规范 类C语法,函数需要定义,指令需要以;结尾。需要大括号{} 文件名,变量,函数命名使用snake case,eg:new_function() 结构体,特征命名,使用大驼峰命名,e…

舵机烧录

舵机烧录 一、硬件连接1、准备物资2、连接(1)舵机线一侧连接舵机控制板,另一侧连接舵机(2)老安卓线一侧连接舵机控制板,一侧连接电脑(3)接上低压电池 二、软件使用1、打开舵机烧录软…

JavaScript高架(二)-V8引擎下

书归上回 ECS(Execution Context Stack) V8引擎为了执行代码, V8引擎内部会有一个执行上下文栈Execution Context Stack(ESC函数调用栈),当首次加载JS的时候就会创建一个Execution Context Stack(ECS),它是用于执行代…

前端面试题---->JavaScript

const声明的对象属性和数组的值可以被修改吗?为什么 原因:当使用const声明一个对象或数组时,实际上是保证了对象或数组的引用不会被修改,但对象或数组本身的属性或元素是可以被修改的。这是因为const只能保证指向的内存地址不变&a…

ChatGPT赋能大气科学:GPT与Python结合应用遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等

目录 专题一 AI领域常见工具讲解 专题二 POE平台及ChatGPT使用方法 专题三 提示词工程 专题四 科研常见应用场景 专题五 Python简明教程 专题六 GPT科研绘图 专题七 GPT辅助下载数据 专题八 遥感降水数据 专题九 数据产品评估 专题十 ERA5全球大气再分析数据 专题十…

python和Vue开发的RBAC用户角色权限管理系统

后端框架:python的FastAPI作为后端服务和python-jose作为JWT认证 前端框架:Vue3构建页面和Vue Router作为路由管理,Pinia作为数据存储,Vite作为打包工具 可以实现菜单控制和路由控制,页面里面有按钮权限控制&#xf…

【深度学习|基础算法】2.AlexNet学习记录

AlexNet示例代码与解析 1、前言2、模型tips3、模型架构4、模型代码backbonetrainpredict 1、前言 AlexNet由Hinton和他的学生Alex Krizhevsky设计,模型名字来源于论文第一作者的姓名Alex。该模型以很大的优势获得了2012年ISLVRC竞赛的冠军网络,分类准确率…

【无标题】C高级325

练习1:输入一个数,实现倒叙123-》321 练习2:输入一个,判断是否是素数 练习3:输入一个文件名, 判断是否在家目录下存在, 如果是一个目录,则直接输出是目录下的sh文件的个数 如果存在则判断是否是…

spring cloud 限流熔断配置

springcloud 微服务网关 zuul.strip-prefixtrue zuul.routes.postgres-client.path /ps01/** zuul.routes.postgres-client.service-idpostgres-client zuul.routes.postgres-client02.path/ps02/** zuul.routes.postgres-client02.service-idpostgres-client02 zuul.semaphor…

密码学之哈希碰撞和生日悖论

哈希碰撞 哈希碰撞是指找到两个不一样的值,它们的哈希值却相同 假设哈希函数的取值空间大小为k ,计算次数为n 先算每个值不一样的概率P’ 所以至少两个值相同(即存在哈希碰撞)的概率P为 生日悖论 假设班里有50个人,求班里至少两个人相同…

亚信安慧AntDB:轻松解决数据处理挑战

AntDB一直秉承着“技术生态”的理念,不断进行技术创新和功能增强,以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统,AntDB在技术上始终保持敏锐的洞察力,不断汲取国内外先进技术的精华&#xff0…

【C语言】Infiniband驱动__mlx4_init_one函数

一、注释 Linux内核驱动程序中的部分,属于Mellanox网卡驱动mlx4的初始化过程。 // Mellanox 以太网驱动主程序代码 static int __mlx4_init_one(struct pci_dev *pdev, int pci_dev_data,struct mlx4_priv *priv) {int err; // 错误码变量int nvfs[MLX4_MAX_PORTS…

【vue3学习笔记(二)】(第141-143节)初识setup;ref函数_处理基本类型;ref函数_处理对象类型

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 本篇内容对应课程第141-143节 课程 P141节 《初识setup》笔记 1、setup是所有组合式API“表演的舞台”,组件中所用到的所有数据、方法、监视数据、生命周期钩子等都需要配置在setup中。 2、setup的两种返回值&…

【MySQL】4.MySQL日志管理与数据库的备份和恢复

备份的目的只要是为了灾难恢复,备份还可以测试应用,回滚数据,修改和查询历史数据,审计等 日志在备份、恢复中起着重要作用 一、数据库备份的重要性 在生产环境中,数据的安全性至关重要 任何数据丢失都可能产生严重的…