sklearn预测评估指标计算详解:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1score

news2024/11/19 4:30:58

目录

前言

一、准确率

 二、精确率

三、召回率

四、F1-score

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢


前言

很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵、准确率、精确率、召回率、F1 score。另外还有P-R曲线以及AUC/ROC,这些我都有写过相应的理论和具体理论过程:

机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线

sklearn预测评估指标:混淆矩阵计算详解-附Python计算代码

 这里我们主要进行实践利用sklearn快速实现模型数据校验,完成基础指标计算。 


一、准确率

准确率是分类正确的样本占总样本个数的比例,即

 我们知道混淆矩阵为:

      真实情况                                  预测结果
                正例                 反例
              正例         TP(真正例)           FN(假反例)
              反例         FP(假正例)           TN(真反例)

其中,ncorrect为被正确分类的样本个数,ntotal为总样本个数。 结合上面的混淆矩阵,公式还可以这样写:

 准确率是分类问题中最简单直观的评价指标,但存在明显的缺陷。比如如果样本中有99%的样本为正样本,那么分类器只需要一直预测为正,就可以得到99%的准确率,但其实际性能是非常低下的。也就是说,当不同类别样本的比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。

from sklearn.metrics import accuracy_score
print('Accuracy:{}'.format(accuracy_score(y_true, y_pred)))

 

 二、精确率

查准率。即正确预测为正类的全部预测为正类的的比例。计算公式为:

 sklearn的参数有:

sklearn.metrics.precision_score(y_true, 
                                y_pred, 
                                *, 
                                labels=None, 
                                pos_label=1, 
                                average='binary', 
                                sample_weight=None, 
                                zero_division='warn')[source]

参数说明:

y_true:array-like, or label indicator array / sparse matrix。真实值。

y_pred:array-like, or label indicator array / sparse matrix。预测值。

labels:array-like, default=None。当average != binary时被包含的标签集合,如果average是None的话还包含它们的顺序. 在数据中存在的标签可以被排除,比如计算一个忽略多数负类的多类平均值时,数据中没有出现的标签会导致宏平均值(marco average)含有0个组件. 对于多标签的目标,标签是列索引. 默认情况下,y_true和y_pred中的所有标签按照排序后的顺序使用.

pos_label:str or int, default=1。如果average='binary'且数据为二进制,则要报告的类。如果数据是多类或多标签的,则将忽略该数据;设置labels=[pos_label]和average!='binary”将只报告该标签的分数。

average:{‘micro’, ‘macro’, ‘samples’, ‘weighted’, ‘binary’} or None, default=’binary’。多类/多标签目标需要此参数。如果无,则返回每个类别的分数。否则,这将决定对数据执行的平均类型:

  • 'binary':仅pos_label指定的类的结果。这仅适用于目标(y_{true,pred})为二进制的情况。
  • 'micro':通过计算总的真正例、假反例和假正例来计算全局度量。
  • 'macro':计算每个标签的指标,并找到它们的未加权平均值。这没有考虑到标签不平衡。
  • 'weighted':为每个标签计算指标,并通过各类占比找到它们的加权均值(每个标签的正例数).它解决了’macro’的标签不平衡问题;它可以产生不在精确率和召回率之间的F-score.
  • 'samples':计算每个实例的度量,并找到它们的平均值(仅对多标记分类有意义,因为这与accuracy_score不同)。

sample_weight:array-like of shape (n_samples,), default=None。标签权重

zero_division:设置除零时返回的值。如果设置为“warn”,则该值将作为0,但也会引发警告。

from sklearn.metrics import precision_score
print('Percosopn:{}'.format(precision_score(y_true, y_pred, average='weighted')))
  • Macro Average
    宏平均是指在计算均值时使每个类别具有相同的权重,最后结果是每个类别的指标的算术平均值。
  • Micro Average
    微平均是指计算多分类指标时赋予所有类别的每个样本相同的权重,将所有样本合在一起计算各个指标。

宏平均和微平均的概念也很重要:

  • 如果每个类别的样本数量差不多,那么宏平均和微平均没有太大差异
  • 如果每个类别的样本数量差异很大,那么注重样本量多的类时使用微平均,注重样本量少的类时使用宏平均
  • 如果微平均大大低于宏平均,那么检查样本量多的类来确定指标表现差的原因
  • 如果宏平均大大低于微平均,那么检查样本量少的类来确定指标表现差的原因

三、召回率

召回率指实际为正的样本中被预测为正的样本所占实际为正的样本的比例。

 召回率是比率tp / (tp + fn),其中tp是真正性的数量,fn是假负性的数量. 召回率直观地说是分类器找到所有正样本的能力. 召回率最好的值是1,最差的值是0.

from sklearn.metrics import recall_score
print('Recall_score:{}'.format(recall_score(y_true, y_pred, average='weighted')))

四、F1-score

F1 score是精确率和召回率的调和平均值,计算公式为:

 Precision体现了模型对负样本的区分能力,Precision越高,模型对负样本的区分能力越强;Recall体现了模型对正样本的识别能力,Recall越高,模型对正样本的识别能力越强。F1 score是两者的综合,F1 score越高,说明模型越稳健。

from sklearn.metrics import f1_score
print('F1_socre:{}'.format(f1_score(y_true, y_pred, average='weighted')))

 

点关注,防走丢,如有纰漏之处,请留言指教,非常感谢

以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见

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

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

相关文章

工具及方法 - 项目管理工具ProjectLibre

这个项目管理工具是开源和免费的,可以作为微软Project工具的平替。官网是 http://www.projectlibre.org 。 下载: ProjectLibre - Project Management download | SourceForge.net 当前的最新版本是2021-01-08的1.9.3版本,而现在是2022-12月…

路由交换网络技术,交换机基础入门及相关特性介绍

一、交换机:工作在数据链路层 ,转发数据帧 HUB所有接口再同一个冲突域,交换机每个接口都属于一个冲突域 交换机功能: 1、学习 2、转发 3、泛洪 4、丢弃 二、学习MAC地址及转发 MAC地址表项默认老化时间300秒。如果在300秒之内收到同一主机从同一接口发来的帧,老化时…

web3:区块链Blockchain

在此声明,仅做分享,绝不存在倡导炒币行为 目录区块链概念区块链基础知识交易(Transaction)区块(Block)链(Chain)公私钥区块链存储结构简单理解区块结构Block区块头Merkle根nonce区块链原理区块链架构区块链特点分布式账本—不可篡改性、去中心化非对称加…

ThinkPHP5之SQLI审计分析(一)

说明 该文章来源于徒弟lu2ker转载至此处,更多文章可参考:https://github.com/lu2ker/ 文章目录说明0x00 测试代码做了什么?0x01 调用链分析0x02 分析最内层调用的处理0x03 分析上一层调用的处理0x04 Payload构造Time:8-31 影响版…

pyTorch入门(六)——实战Android Minist OpenCV手写数字识别(附源码地址)

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为4239字,预计阅读12分钟 前言 前面几篇文章实现了pyTorch训练模型,然后在Windows平台用C OpenCV DNN推理都实现了,这篇就来看看在Android端直接实现一个手写数字识别的功…

The Open Group亚太区总经理Chris Forde元旦贺词:踔厉奋发、笃行不怠,共赴新未来!

Happy New Year everyone, hope you are enjoying the holiday season, and perhaps planning your New Year’s resolutions. 大家新年快乐!希望此刻您正在享受假期,或在规划自己的新年决心。 Now is the time for me, with you, to say goodbye to 202…

PDF怎么转换成Word?电脑必备的转换工具

电脑上的办公场景可以说是很多样了,而现在线上办公,线上会议,以及线上网课等的发展越来越全面,关于文件的编辑和传输也渐渐需要更多的软件来辅助我们办公。就像是PDF文件格式和Word文件格式这两种常见的格式,想要直接进…

小米路由器 R4A 刷原生 OpenWrt 后的风景

简 述: 继上篇 小米AX6S刷OpenWrt和开启OpenClash 后,手痒难耐,决定把小米路由器4A千兆版(R4A)路由器 给刷个原生的 OpenWrt。 文章目录背景刷成原生 OpenWrt原生 OpenWrt 基础操作开启 WiFiopkg 换源设置中文OpenClash 插件8M 之殇,终结Refe…

JavaSE学习(二)

1.基本数据类型转换 自动类型转换 1.java程序在进行赋值或运算的时候,会将精度小的类型自动转换为精度大的数据类型再进行计算 2.精度大的类型赋值给精度小的类型会报错,反之则会进行自动类型转换 int a4; floata1.1;这样写是错的,因为1.1是…

Uni-app + Vue3 + TS +Vite 创建项目

一、npx 与 npm 区别 npm 都很熟,可是与 npm 如此相似的 npx 是干嘛的呢?我们为甚要介绍 npx ? 由于 uni-app 官方提供创建命令使用的是 npx,所以我们先来了解下 npx 是干什么的?它与 npm 的区别。 npx 是 npm 的高级版本&…

java 出现unreachable statement异常 原因检查

unreachable statement异常: 今天在写代码的过程中,发现有行代码变红线,显示unreachable statement异常,但是代码本身没什么问题,通过查询资料发现其实就是该行代码不可执行的原因,出现该异常共有以下两种…

第三十八章 贪心算法——区间问题(上)

第三十八章 贪心策略——区间相关问题一、什么贪心策略?二、区间问题合集1、思路:2、问题1: 区间选点(1)问题(2)思路和证明a.思路b.证明(3)代码3、问题2:&…

Linux系统编程——基础篇

文章目录一、快捷键二、文件1.重要文件2.文件类型3.cp4.增加权限5.修改三、查找和检索四、安装五、压缩与解压六、vim的三种工作方式七、gcc编译四步骤八、静态库和动态库一、快捷键 Ctrla:光标移到开头 Ctrle:光标移到结尾 Ctrlu:清除整行 …

SQLSERVER 居然也能调 C# 代码 ?

一:背景 1. 讲故事 前些天看到一个奇怪的 Function 函数,调用的是 C# 链接库中的一个 UserLogin 方法,参考代码如下: CREATE FUNCTION dbo.clr_UserLogin (name AS NVARCHAR(100),password AS NVARCHAR(100) ) RETURNS INT AS…

Kali Linux中shutdown指令的用法3-1

在Kali Linux中,shutdown指令用于停止(halt)、关闭(power off)或者重启(reboot)系统。 1 语法格式 shutdown指令的语法如下所示 shutdown [OPTIONS] [TIME] [WALL] 其中,OPTIONS…

Qt、使用QToolButton和QStackedWidget的侧边栏(SideBar)的实现与实现原理解析

Qt、侧边栏(SideBar)的原理与实现(附Demo) 目录Qt、侧边栏(SideBar)的原理与实现(附Demo)1、简介2、侧边栏控件组成3、UI布局4、代码实现界面的切换Demo下载:https://git…

2023四川大学图书情报档案专业考研初试介绍(2023.1.02已更新)

文章目录川大图情基本情况2023年招生情况近5年录取数据复试2021-2022年复试线学硕复试线图情专硕复试线2021-2022年复试录取分数2022年学硕部分拟录取人员详细分数(不含调剂)专业课备考专业课资料博主所售资料一览667科目备考参考策略972科目备考方法参考目标分数川大图情基本情…

分享一套开源的springboot制造执行MES系统源码,带本地部署搭建教程+运行文档

全开源的一套超有价值的JAVA制造执行MES系统源码 亲测 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境:jdk1./1.8 tomcat mysql5.6springmvcmaven 需要源码学习,私信我获取。 一、系统概述: MES制造执行系统,其定位…

十分钟入门HBase特性与安装部署

1.写在前面 目前Hadoop生态的大数据组件都有一个其本身擅长的领域,并且目前看来,这个领域相对较窄,所以各位学生在大数据相关活动中,难免会有技术交集,最近学生在做离线数仓项目的时候,采用kylin技术组件&a…

【MySQL进阶教程】 存储引擎详细介绍

前言 本文为 【MySQL进阶教程】 存储引擎 相关知识介绍,下边具体将对MySQL体系结构,存储引擎介绍,存储引擎特点(包含:InnoDB、MyISAM、Memory的特点及对比),存储引擎选择等进行详尽介绍~ &…