【深度学习】计算分类模型的分类指标,计算accuracy_top-1、accuracy_top-5、precision、recall和f1_score

news2024/9/24 13:22:44

在这里插入图片描述

计算accuracy_top-1、accuracy_top-5、precision、recall和f1_score:

(1)accuracy_top-1
np.sum(np.argmax(preds, axis=1) == np.argmax(actual, axis=1)) / actual.shape[0]
accuracy_top-1指标是假设预测数据中,最大值的index就是预测出来的样本类别,从而看一下总共预测正确了多少个样本,再除以总数量即是accuracy_top-1指标。

(2)accuracy_top-5
np.sum(np.argsort(preds, axis=1)[:, -1:-5:-1] == np.argmax(actual, axis=1).reshape(-1, 1)) / actual.shape[0]
和accuracy_top-1类似,也是先将预测出的多个概率值排序,但取最大的五个的index,只要有一个index能对上真实的label,那就是预测准确。预测正确的样本数再除以总数量即是accuracy_top-1指标。
有个风险是,有时候类别数量小于5,这样怎么算accuracy_top-5的数值都会是100%。

(3)precision、recall、f1_score
这都是在引入threshold 数值之后才能计算的。
precision = tp / (tp + fp) # 预测正确数量/所有的预测数量
recall = tp / (tp + fn) # 预测正确数量/所有的实际数量
f1_score = 2 * precision * recall / (precision + recall)

“所有的预测数量” 和 “所有的实际数量” 都不是我们的总样本数量,当一个样本输入模型,模型的结果中,如果几个类别的预测值都小于预测值,那么这个样本就不会纳入到这里“precision、recall或f1_score”的计算。

那么Why? 因为我们是在评估模型的方面的指标,评估模型的指标就是这样计算。而总样本数量不会影响模型的指标,但是会影响模型的泛化性能。

下面的程序中,构建好实际labels和预测preds,即可计算出所有指标:

import numpy as np

n_samples = 10000  # 假设总样本个数
cls_n = 6  # 假设模型类别个数
threshold = 0.5   # 阈值


# n_samples行,6列,每一行只有一个数字是1
actual = np.zeros((n_samples, cls_n))
actual[np.arange(n_samples), np.random.randint(0, cls_n, n_samples)] = 1

# 7个样本是7行, 6个类别是6列
# 高斯分布
preds = np.random.randn(n_samples, cls_n)
sums = preds.sum(axis=1)  # 求每行的和
preds /= sums[:, None]  # 每行除以自己的和

# 计算accuracy_top-1
top1_acc = np.sum(np.argmax(preds, axis=1) == np.argmax(actual, axis=1)) / actual.shape[0]
print("accuracy_top-1", top1_acc)

# 计算accuracy_top-5
top5_acc = np.sum(np.argsort(preds, axis=1)[:, -1:-5:-1] == np.argmax(actual, axis=1).reshape(-1, 1)) / actual.shape[0]
print("accuracy_top-5", top5_acc)

# 计算各个类别precision, recall和f1 score
for i in range(actual.shape[1]):
    tp = np.sum(np.logical_and(preds[:, i] >= threshold, actual[:, i] == 1))
    fp = np.sum(np.logical_and(preds[:, i] >= threshold, actual[:, i] == 0))
    fn = np.sum(np.logical_and(preds[:, i] < threshold, actual[:, i] == 1))
    if tp == 0 or tp + fp == 0:
        precision = 0
    else:
        precision = tp / (tp + fp)  # 预测正确数量/所有的预测数量
    if tp == 0 or tp + fn == 0:
        recall = 0
    else:
        recall = tp / (tp + fn)  # 预测正确数量/所有的实际数量
    if precision + recall == 0:
        f1_score = 0
    else:
        f1_score = 2 * precision * recall / (precision + recall)
    print("class", i, "precision", round(precision, 4), "recall", round(recall, 4), "f1_score", round(f1_score, 4))

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

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

相关文章

自动控制原理模拟卷8

自动控制原理模拟题八 Question1 求解以下电网络和机械系统的传递函数,并证明下图的电网络和机械系统有相同的数学模型。 解: 【图 ( a ) ({\rm a}) (a)系统传递函数】 根据复数阻抗的方法可得电网络的传递函数为:

为啥运维人员更喜欢 NeoVim 而不是 Vim?这8个原因或许是答案,命令对比一目了然!

在 Linux 系统中&#xff0c;编辑器是开发和系统管理的必备工具。而在众多编辑器中&#xff0c;Vim 作为一款经典的文本编辑器&#xff0c;一直备受欢迎。然而&#xff0c;随着时间的推移&#xff0c;NeoVim 的出现逐渐成为了 Linux 运维人员的首选。那么&#xff0c;为什么 Li…

Opencv+Python笔记(七)边缘检测原理

注意:梯度计算总是由右边减去左边 目录 一、边缘检测原理二、Sobel算子&#xff08;基于搜索&#xff09;三、Laplacian算子&#xff08;基于零穿越&#xff09;四、Candy边缘检测算法1.消除噪声2. 计算图像的亮度梯度值3.减除虚假边缘&#xff08;非极大值抑制NMS&#xff09…

OSCP-Sirol(docker容器到宿主机)

目录 扫描 WEB 提权 扫描 sudo nmap 192.168.64.54 -p- -sS -sVPORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u7 (protocol 2.0) 53/tcp closed domain 80/tcp open http Apache httpd 2.4.25 ((Debian)) 3306…

Spring更简单的存取方法

Spring存对象 在Spring的创建和使用篇章里&#xff0c;提到了用bean标签来将对象标识到Spring里面&#xff0c;但是这样的方法过于麻烦&#xff0c;下面我们来介绍使用类注解来存储对象。 五大类注解存对象 Spring里面有五大类注解&#xff1a; Controller、Service、Repos…

NeRF必读五:NeRF in the wild

前言 NeRF从2020年发展至今&#xff0c;仅仅三年时间&#xff0c;而Follow的工作已呈井喷之势&#xff0c;相信在不久的将来&#xff0c;NeRF会一举重塑三维重建这个业界&#xff0c;甚至重建我们的四维世界&#xff08;开头先吹一波&#xff09;。NeRF的发展时间虽短&#xf…

ubuntu 3060显卡驱动+cuda+cudnn+pytorch+pycharm+vscode

文章目录 运行环境&#xff1a;适用&#xff1a;思路&#xff1a;1.1 3060显卡驱动自动安装2.1 CUDA11.1.11)下载CUDA Toolkit 11.1 Update 1 Downloads2)contunue , 然后accept3)回车取消Driver安装&#xff0c;然后install4)添加环境变量5)确认是否安装成功 3.1 cudnn 8.1.11…

【git安装、使用、常用命令】

文章目录 一、git下载与安装二、git的使用1.初次运行配置git2、本地新建版本仓库3、提交代码 总结&#xff08;git 常用命令&#xff09; 一、git下载与安装 1、下载链接&#xff1a; Git&#xff08;Git 主程序&#xff09;https://git-scm.com/downloads 根据自身电脑操作系…

客户端请求耗时严重原因排查优化 (Nginx导致)

客户端请求耗时严重&#xff0c;初步从几个方面进行排查 1.检查网络连接&#xff0c;是否实现丢包&#xff0c;网络波动&#xff0c;网络拥堵等问题。 2.检查客户端请求耗时和project api 接口耗时差异&#xff0c;判断是nginx问题还是接口问题 如果是nginx耗时导致&#xff0c…

podman pull或者push http镜像遇到http: server gave HTTP response to HTTPS client

原因:Docker自从1.3.X之后docker registry交互默认使用的是HTTPS&#xff0c;但是搭建私有镜像默认使用的是HTTP服务&#xff0c;所以与私有镜像交时出现以上错误 解决方案&#xff1a; #增加以下配置 vi /etc/containers/registries.conf [[registry]] location "…

mac gitstats查看git提交记录

一、介绍&#xff1a; 进一步来讲&#xff0c;Gitstats它是一个git仓库分析软件&#xff0c;它可以检查仓库并生成历史数据的统计信息。可以帮助你查看git仓库的提交状态&#xff0c;根据不同维度分析计算&#xff0c;并自动生成数据图表。 官网介绍&#xff1a;http://gitst…

基于 DolphinDB 机器学习的出租车行程时间预测

DolphinDB 集高性能时序数据库与全面的分析功能为一体&#xff0c;可用于海量结构化数据的存储、查询、分析、实时计算等&#xff0c;在工业物联网场景中应用广泛。本文以纽约出租车行程时间预测为例&#xff0c;介绍如何使用 DolphinDB 训练机器学习模型&#xff0c;并进行实时…

python+vue古诗词鉴赏学习网站vue+django国学经典在线学习系统

国古典诗词&#xff0c;是中华传统文化的瑰宝&#xff0c;民族精神的精华&#xff0c;是中国传统文化的精粹,在中国璀灿的古代文化中占有重要的地位。古诗不仅内涵丰富、包罗万象、意境深邃,具有很高的审美价值和很强的艺术感染力,而且语言凝练、短小精悍,词句优美,韵体和谐,使…

大数据周会-本周学习内容总结011

开会时间&#xff1a;2023.04.23 15:00 线下会议 目录 01【spark】 02【es同步mysql】 03【下周任务】 01【spark】 尚硅谷大数据技术Spark教程-笔记01【Spark&#xff08;概述、快速上手、运行环境、运行架构&#xff09;】尚硅谷大数据技术Spark教程-笔记02【SparkCore&am…

vue2 路由相关知识点

文章目录 1. 搭建路由组件1.1 安装 vue-router1.2 配置路由 2. 使用路由3. 路由的跳转3.1 声明式导航3.2 编程式导航 4. 路由传参4.1 路由传递参数 : 字符串形式4.2 路由传递参数 : 对象写法4.3 路由传参相关面试题 5. meta 使用6. 重写 push 和 replace 方法 1. 搭建路由组件 …

6 计时器(六)

6.7 TMI编码器接口 Encoder Interface 编码器接口 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT自增或自减&#xff0c;从而指示编码器的位置、旋转方向和旋转速度 每个高级定时器和通…

(二十一)查找算法-插值查找

1 基本介绍 1.1 插值查找 插值查找算法又称插值搜索算法&#xff0c;是在二分查找算法的基础上改进得到的一种查找算法。 插值查找算法只适用于有序序列&#xff0c;换句话说&#xff0c;它只能在升序序列或者降序序列中查找目标元素。作为“改进版”的二分查找算法&#xf…

手动测试台架搭建,让你的车载测试更轻松

目录&#xff1a;导读 引言 1、概述 2、主要内容 3、汽车测试台架分类 4、汽车测试台架分类 5、汽车测试台架分类台架测试输人台架硬件搭建CANoe台架搭建 6、台架测试输入&#xff1f; 7、需求规范是功能测试用例设计来源测试结果的判断﹔包括∶客户需求(功能规范)需求分…

Redis框架与SpringBoot的整合及详细学习汇总

目录 springBoot整合Redis Redis 的优势 Redis安装 Redis数据类型 springboot操作Redis springboot 配置redis RedisTemplate及其相关方法 springBoot实现上传下载 RedisTemplate及其相关方法 springBoot实现上传下载 springBoot CORS&#xff08;跨域资源共享&#…

【C++11】简介、列表初始化、声明、范围for、STL中的一些变化

简介、列表初始化、声明、范围for、STL中的一些变化 文章目录 简介、列表初始化、声明、范围for、STL中的一些变化一、C11简介二、统一的列表初始化1.{ }初始化2.initializer_list容器 三、声明1.auto2.decltype3.nullptr 四、范围for循环五、STL中一些变化 一、C11简介 在2003…