深度学习中的准确率、精确率(查准率)、召回率(查全率)、F1值、ROC曲线的AUC值,

news2024/11/17 12:51:28

混淆矩阵

其中关于 TP, TN; FP, FN 的解释;

其中首字母 T,F代表预测的情况,即T代表预测的结果是对的, F代表预测的结果是错误的;
第二个字母代表预测是预测为 正样本,还是负样本, Positve 代表正样本;

注意,
此时这里的正样本代表的 是 预测属于某一类别的样本;
负样本则代表预测不属于某一类别的样本。

举例说来

  • TP: True 模型预测正确, 预测为正样本Positive;
  • FN: False 模型预测错误, 预测为负样本 Negative;

在这里插入图片描述

通常情况下,混淆矩阵中, 行代表真实值,列代表预测值,

部分仓库, 与此不一致,列代表真实值,行代表预测值,
需要阅读代码的时候,通过查看文档确定;

在这里插入图片描述

1. 基础指标

1.1 准确率 (accuracy)

准确率:衡量正确预测的样本占总样本的比例。这是最简单的指标,

计算方式为 :
预测正确的样本数目 所有预测的样本数目 \frac{预测正确的样本数目 }{所有预测的样本数目} 所有预测的样本数目预测正确的样本数目

然而,普通的准确率并不适合不平衡的数据集

  • 因为在 类别不均衡的数据集中,
    假设异常类别的样本数目特别多, 异常类别的样本数目很少。

此时, 正常样本的预测正确的个数很高, 但是异常类别的样本全部预测错误,
此时,在这种情况下, 整体样本的准确率仍然非常高, 然而实际情况却并非如此,因为此时异常样本的预测的准确率几乎为0;

1.2 精确率(查准率) Precision

查准率:
它衡量 正确预测的正观测值与预测的正观测值总数的比率。

  • 它评估模型预测正类的准确性,计算公式为:

T r u e P o s i t i v e T r u e P o s i t i v e + F a l s e P o s i t i v e \frac{ True Positive }{ True Positive + False Positive } TruePositive+FalsePositiveTruePositive

分子: True Positive: 预测正确,且预测为正样本, 即混淆矩阵中对角线上的值;
分母: False Positive: 预测错误, 且预测为正样本;

1.3召回率(查全率) Recall ( Sensitivity)

召回率(灵敏度):它衡量正确预测的阳性观察结果与所有实际阳性结果的比率。

  • 它评估模型检测所有正实例的能力,

计算公式为
True Positives
True Positives + False Negatives
True Positives + False Negatives
True Positives

分子: True Positive: 预测正确,且预测为正样本, 即混淆矩阵中对角线上的值;
分母: False Negative : 预测错误, 且预测为正样本; 该类别下所有的样本个数, 通常是某一行的所有样本的总和。

1.4 F1值、

F1 分数:精确率和召回率的调和平均值。

  • F1 分数在精确度和召回率之间提供了平衡,对这两个指标给予相同的权重。
    其计算方式为

1.5 ROC曲线的AUC值

AUC-ROC (Area Under the Receiver Operating Characteristic Curve)

ROC 曲线是各种阈值的真阳性率(召回率)与假阳性率(1 - 特异性)的图形表示。 AUC-ROC 测量该曲线下的面积,并提供所有可能的分类阈值的总体性能测量

上述指标中,在 Python 中使用 scikit-learn,这些指标可以计算如下:

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score

# Assuming y_true contains true labels and y_pred contains predicted labels
# Calculate different evaluation metrics
accuracy = accuracy_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
auc_roc = roc_auc_score(y_true, y_scores)  # y_scores are the predicted scores or probabilities

# Print the calculated metrics
print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")
print(f"AUC-ROC: {auc_roc}")

1.6 average 参数的选择

对于 precision_score 、 recall_score 和 f1_score , average 参数指定对每类指标执行平均的类型,以计算总体指标:

  • average=‘micro’ :
    通过计算所有类别的真阳性、假阴性和假阳性总数来全局计算指标。然后使用这些聚合值计算指标。

  • average=‘macro’: 单独计算每个类的指标,然后取这些指标的未加权平均值。平等对待所有类别,无论类别是否不平衡。

  • average=‘weighted’ :单独计算每个类的指标,然后取这些指标的加权平均值,其中每个类的分数按其支持度(真实实例的数量)进行加权。

from  sklearn.metrics import precision_score, recall_score, f1_score

# Assuming y_true contains true labels and y_pred contains predicted labels for multi-class classification
# Calculate precision, recall, and F1-score with different averaging methods
precision_micro = precision_score(y_true, y_pred, average='micro')
precision_macro = precision_score(y_true, y_pred, average='macro')
precision_weighted = precision_score(y_true, y_pred, average='weighted')

recall_micro = recall_score(y_true, y_pred, average='micro')
recall_macro = recall_score(y_true, y_pred, average='macro')
recall_weighted = recall_score(y_true, y_pred, average='weighted')

f1_micro = f1_score(y_true, y_pred, average='micro')
f1_macro = f1_score(y_true, y_pred, average='macro')
f1_weighted = f1_score(y_true, y_pred, average='weighted')

# Print the calculated metrics
print(f"Precision - Micro: {precision_micro}, Macro: {precision_macro}, Weighted: {precision_weighted}")
print(f"Recall - Micro: {recall_micro}, Macro: {recall_macro}, Weighted: {recall_weighted}")
print(f"F1 Score - Micro: {f1_micro}, Macro: {f1_macro}, Weighted: {f1_weighted}")

reference

https://www.cnblogs.com/Yanjy-OnlyOne/p/11362315.html#:~:text=3%E3%80%81%E6%B7%B7%E6%B7%86%E7%9F%A9%E9%98%B5(Confusion%20Matrix,%E4%BB%A3%E8%A1%A8%E7%9A%84%E6%98%AF%E9%A2%84%E6%B5%8B%E5%80%BC%E3%80%82

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

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

相关文章

Python实现某城市从站点API获取天气状况示例(Crossin教室实例24)

一、要点说明: 根据站点当前API数据是由‘\r’字符连接的字符串的特点,主要用到了字符串的split()方法。此方法参数就是‘\r’。函数返回值是被分隔的字符串的列表。通过使用列表索引就可以分项取到天气数据。 二、示例代码: import reque…

面试被问了几百遍的 IOC 和 AOP ,一篇文章带你搞清楚!!!

面试被问了几百遍的 IOC 和 AOP ,一篇文章带你搞清楚!!! 这篇文章会从下面从以下几个问题展开对 IoC & AOP 的解释 什么是 IoC?IoC 解决了什么问题?IoC 和 DI 的区别?什么是 AOP&#xff…

LeetCode206链表反转

//我来理解一下运用递归求解 class Solution { public:ListNode* reverseList(ListNode* head) {//首先判断是否为最后一个元素if(head null|| head.next null){return head;//返回末尾元素}ListNode* receive;//此时进入循环的每一层都实现了temp接收head.next的结点进行…

解决sublime中文符号乱码问题

效果图 原来 后来 问题不是出自encode文件编码,而是win10的字体问题。 解决方法 配置: { "font_face":"Microsoft Yahei", "dpi_scale": 1.0 } 参考自 Sublime 输入中文显示方框问号乱码_sublime中文问号-CSDN博…

Python新年烟花代码

Pygame 绘制烟花的基本原理 1,发射阶段:在这一阶段烟花的形状是线性向上,通过设定一组大小不同、颜色不同的点来模拟“向上发射” 的运动运动,运动过程中 5个点被赋予不同大小的加速度,随着时间推移,后面的…

LeGO-LOAM 安装以及运行

一、源码地址: GitHub - RobustFieldAutonomyLab/LeGO-LOAM: LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable TerrainLeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain - GitH…

报错解决:Error creating bean with name ‘userServiceImpl‘

首先:spring整合MyBatis是出现这个错误: Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name userServiceImpl: Unsatisfied dependency expressed through fiel…

你的网站或许不需要前端构建(二)

前一阵,有朋友问我,能否在不进行前端编译构建的情况下,用现代语法开发网站界面。 于是,就有了这篇文章中提到的方案。 写在前面 这篇文章,依旧不想讨论构建或不构建,哪一种方案对开发更友好,…

go-cqhttp作者停止维护——替代品OpenShamrock的使用方法

目录 前言 解决办法 配置要求 实操 刷入面具 安装lsp框架 安装OpenShamrock和QQ 注意 大功告成 前言 由于QQ官方针对协议库的围追堵截,go-cqhttp已经无力维护下去了 原文连接 QQ Bot的未来以及迁移建议 Issue #2471 Mrs4s/go-cqhttp (github.com)https…

基于WS2812的圣诞树

项目说明 通过使用1010封装的WS2812灯珠,实现整体观感和谐、可视角度更佳的迷你圣诞树采用电池供电触摸开关机手机遥控方案,主打一个优雅。 主要特色 1、灯板部分(圣诞树主体) 使用1010封装的WS2812灯珠,体积小更和…

Jetson Orin Nano_安装jtop指令(遇到循环提示重启服务的问题)、查看系统运行情况及基本信息

1、安装jtop 1.1、如果一切顺利的话,流程如下 安装jetson-stats(前提:安装pip3) sudo pip3 install jetson-stats 执行jtop,根据提示需要重启服务 sudo systemctl restart jtop.service sudo jtop 1.2、循环提示…

深入理解Java中资源加载的方法及Spring的ResourceLoader应用

在Java开发中,资源加载是一个基础而重要的操作。本文将深入探讨Java中两种常见的资源加载方式:ClassLoader的getResource方法和Class的getResource方法,并介绍Spring框架中的ResourceLoader的应用。 1. 资源加载的两种方式 1.1 ClassLoader…

Spring见解4 基于注解的AOP配置

5.基于注解的AOP配置 5.1.创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation…

基于群居蜘蛛算法优化的Elman神经网络数据预测 - 附代码

基于群居蜘蛛算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于群居蜘蛛算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于群居蜘蛛优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

Python如何实现微信支付功能代码示例

微信支付是一种基于互联网的移动支付服务&#xff0c;由中国的即时通讯工具微信提供。用户可以通过微信支付在微信平台上进行在线支付、转账和收款。微信支付支持多种支付方式&#xff0c;包括银行卡支付、微信钱包余额支付、扫码支付等。用户可以用微信支付购买商品、支付账单…

【Java】LockSupport原理与使用

LockSupport&#xff1a; 关键字段&#xff1a; private static final sun.misc.Unsafe UNSAFE;private static final long parkBlockerOffset; Unsafe&#xff1a;"魔法类"&#xff0c;较为底层&#xff0c;在LockSupport类中用于线程调度(线程阻塞、线程恢复等)。…

【递归】C++算法:124 二叉树中的最大路径和

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 递归 124. 二叉树中的最大路径和 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#x…

【响应式编程-03】Lambda表达式底层实现原理

一、简要描述 Lambda的底层实现原理Lambda表达式编译和运行过程 二、Lambda的底层实现原理 Lambda表达式的本质 函数式接口的匿名子类的匿名对象 反编译&#xff1a;cfr-0.145.jar 反编译&#xff1a;LambdaMetafactory.metafactory() 跟踪调试&#xff0c;转储Lambda类&#x…

HarmonyOS 应用开发学习笔记 ets自定义组件及其引用 @Component自定义组件

Component注解的作用是用来构建自定义组件 Component组件官方文档 自定义组件具有以下特点&#xff1a; 可组合&#xff1a;允许开发者组合使用系统组件、及其属性和方法。 可重用&#xff1a;自定义组件可以被其他组件重用&#xff0c;并作为不同的实例在不同的父组件或容器…