多分类评估指标计算

news2024/10/7 6:44:59

文章目录

  • 混淆矩阵回顾
  • Precision、Recall、F1回顾
  • 多分类混淆矩阵
  • 宏平均(Macro-average)
  • 微平均(Micro-average)
  • 加权平均(Weighted-average)
  • 总结
  • 代码

混淆矩阵回顾

在这里插入图片描述

  • 若一个实例是正类,并且被预测为正类,即为真正类,TP(True Positive)
  • 若一个实例是正类,但是被预测为负类,即为假负类,FN(False Negative)
  • 若一个实例是负类,但是被预测为正类,即为假正类,FP(False Positive)
  • 若一个实例是负类,并且被预测为负类,即为真负类,TN(True Negative)

第一个字母T/F,表示预测的正确与否;第二个字母P/N,表示预测的结果为正例或者负例。TP就表示预测对了,预测的结果是正例,那它的意思就是把正例预测为了正例。

Precision、Recall、F1回顾

  • 精确率(Precision、查准率):针对预测结果而言,指的是所有预测为正的样本中实际为正的概率。
    P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP

  • 召回率(Recall、查全率):针对原样本而言,指的是实际为正的样本中被预测为正样本的概率。
    R e c a l l = T P T P + F N Recall = \frac{TP}{TP + FN} Recall=TP+FNTP

  • F1:综合精确率和召回率:
    F 1 = 2 ∗ P ∗ R P + R F1 = \frac{2 * P * R}{P + R} F1=P+R2PR

举个例子:假设共有10张图片进行分类,其中有4张是狗。模型最终分出了5张狗,但是在这5张中,只有3张被正确识别为狗。
精确率为:3/5=60%,即分出的这5张,只有3张是对的;
召回率为:3/4=75%,即总共有4张狗图片需要识别,模型正确识别了3张。

多分类混淆矩阵

我们直接以3分类为例看下:

在这里插入图片描述

  • 对角线的值表示分类器对该类别预测正确的个数;
  • 每一横轴表示这个类别真实的样本数,猫共有6只、狗共有10只、鸟共有9只,样本总数为25;

对于猫来说:
P r e c i s i o n 猫 = 4 13 = 0.3077 Precision_{猫} = \frac{4}{13} = 0.3077 Precision=134=0.3077

R e c a l l 猫 = 4 6 = 0.67 Recall_{猫} = \frac{4}{6} = 0.67 Recall=64=0.67

对于狗来说:
P r e c i s i o n 狗 = 2 3 = 0.67 Precision_{狗} = \frac{2}{3} = 0.67 Precision=32=0.67

R e c a l l 狗 = 2 10 = 0.2 Recall_{狗} = \frac{2}{10} = 0.2 Recall=102=0.2

对于鸟来说:
P r e c i s i o n 鸟 = 6 9 = 0.67 Precision_{鸟} = \frac{6}{9} = 0.67 Precision=96=0.67

R e c a l l 鸟 = 6 9 = 0.67 Recall_{鸟} = \frac{6}{9} = 0.67 Recall=96=0.67

宏平均(Macro-average)

宏平均是直接将不同类别的指标加起来做平均,能够平等的看待每个类别,但是它的值会受到稀有类别的影响,会更加关注类别少的样本。

  • 宏精确率 macroP:计算每个类别的精确率然后求均值:
    m a c r o P = 1 n ∑ 1 n P i macroP = \frac{1}{n} \sum_{1}^{n} P_i macroP=n11nPi
    m a c r o P = 0.3077 + 0.67 + 0.67 3 macroP = \frac{0.3077 + 0.67 + 0.67}{3} macroP=30.3077+0.67+0.67

  • 宏召回率 macroR:计算每个类别的召回率然后求均值:
    m a c r o R = 1 n ∑ 1 n R i macroR = \frac{1}{n} \sum_{1}^{n} R_i macroR=n11nRi
    m a c r o R = 0.67 + 0.2 + 0.67 3 macroR = \frac{0.67 + 0.2 + 0.67}{3} macroR=30.67+0.2+0.67

  • 宏F1 macroF1:
    m a c r o F 1 = 2 × m a c r o P × m a c r o R m a c r o P + m a c r o R macroF1 = \frac{2 \times macroP \times macroR}{macroP + macroR} macroF1=macroP+macroR2×macroP×macroR

微平均(Micro-average)

与宏平均不同,微平均先将混淆矩阵的TP、FP、TN、FN对应位置求均值,然后再根据公式计算。

  • 微精确率 microP:
    m i c r o P = T P ‾ T P ‾ × F P ‾ microP = \frac{\overline {TP}}{\overline {TP} \times \overline {FP}} microP=TP×FPTP

  • 微召回率 microR:
    m i c r o R = T P ‾ T P ‾ × F N ‾ microR = \frac{\overline {TP}}{\overline {TP} \times \overline {FN}} microR=TP×FNTP

  • 微F1 microF1
    m i c r o F 1 = 2 × m i c r o P × m i c r o R m i c r o P + m i c r o R microF1 = \frac{2 \times microP \times microR}{microP + microR} microF1=microP+microR2×microP×microR

加权平均(Weighted-average)

  • 权重为各类别的占比:
    w i = s u m ( i ) s u m ( c l a s s ) w_i = \frac{sum(i)}{sum(class)} wi=sum(class)sum(i)

  • 加权精确率 weightedP:
    w e i g h t e d P = ∑ i w i P i weightedP = \sum_{i} w_i P_i weightedP=iwiPi

  • 加权召回率
    w e i g h t e d R = ∑ i w i R i weightedR = \sum_{i} w_i R_i weightedR=iwiRi

  • 加权F1:
    w e i g h t e d F 1 = 2 × w e i g h t e d P × w e i g h t e d R w e i g h t e d P + w e i g h t e d R weightedF1 = \frac{2 \times weightedP \times weightedR}{weightedP + weightedR} weightedF1=weightedP+weightedR2×weightedP×weightedR

总结

  • 如果看重样本数量多的class,推荐微平均;
  • 如果看重样本数量少的class,推荐宏平均;
  • 如果微平均 远 低于宏平均,需要注意样本量多的class;
  • 如果微平均 远 高于宏平均,需要注意样本量少的class。

代码

def adaptive_calculation(metric, pre_y, y, task='binary'):
    '''
    binary metric:accuracy、precision、recall、f1
    multiclass metric:accuracy、macro_p、macro_r、macro_f1、micro_p、micro_r、micro_f1、weighted_p、weighted_r、weighted_f1
    '''
    indict = {}
    indict['accuracy'] = metrics.accuracy_score(y, pre_y)
    if task == 'binary':
        for i in metric:
            if i == 'precision':
                indict['precision'] = metrics.precision_score(y, pre_y)
            if i == 'recall':
                indict['recall'] = metrics.recall_score(y, pre_y)
            if i == 'f1':
                indict['f1'] = metrics.f1_score(y, pre_y)
    elif task == 'multiclass':
        for i in metric:
            if i == 'macro_p':
                indict['macro_p'] = metrics.precision_score(y, pre_y, average='macro')
            if i == 'macro_r':
                indict['macro_r'] = metrics.recall_score(y, pre_y, average='macro')
            if i == 'macro_f1':
                indict['macro_f1'] = metrics.f1_score(y, pre_y, average='macro')
            if i == 'micro_p':
                indict['micro_p'] = metrics.precision_score(y, pre_y, average='micro')
            if i == 'micro_r':
                indict['micro_r'] = metrics.recall_score(y, pre_y, average='micro')
            if i == 'micro_f1':
                indict['micro_f1'] = metrics.f1_score(y, pre_y, average='micro')
            if i == 'weighted_p':
                indict['weighted_p'] = metrics.precision_score(y, pre_y, average='weighted')
            if i == 'weighted_r':
                indict['weighted_r'] = metrics.recall_score(y, pre_y, average='weighted')
            if i == 'weighted_f1':
                indict['weighted_f1'] = metrics.f1_score(y, pre_y, average='weighted')
    return indict

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

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

相关文章

Linux(Nginx)

目录 一、Nginx简介 二、Nginx使用 Nginx安装 tomcat负载均衡 Nginx配置 三、Nginx部署项目 项目打包前 将前端项目打包(测试本地项目打包后没问题) ip/host主机映射 完成Nginx动静分离的default.conf的相关配置 将前台项目打包(配合Nginx动静…

real-word super resulution: real-sr, real-vsr, realbasicvsr 三篇超分和视频超分论文

real-world image and video super-resolution 文章目录real-world image and video super-resolution1. Toward Real-World Single Image Super-Resolution:A New Benchmark and A New Model(2019)1.1 real-world数据集制作1.2 LP-KPN网络结构1.3 拉普拉…

近八成中国程序员起薪过万人民币,你过了么?

打工者联盟为了抵抗996、拖欠工资、黑心老板、恶心公司,让我们组成打工者联盟。客观评价自己任职过的公司情况,为其他求职者竖起一座引路的明灯。https://book.employleague.cn/一项调查显示,近八成中国程序员本科毕业生起薪过万(…

Oracle数据库中的数据完整性

目录 1.数据完整性约束作用 2.数据完整性约束的分类 3.完整性约束的状态 4.域完整性的实现 (1)check约束 ①可视化方式创建check约束 ②命令方式创建约束 ③修改表创建的约束 ④删除约束 (2)实体完整性约束实现 ①prim…

思科dhcp服务器动态获取ip地址

项目要求: 某公司共有网管中心、行政部、技术部、三个部门,分别处在一栋大楼中的两个楼层,为了保证公司内部主机始终能够连接Internet,采用双向冗余设计,分别使用路由器R1与路由器R2连接中国电信和中国联通。 1.首先为了避免不必要…

【算法详解】数据结构:7种哈希散列算法,你知道几个?

一、前言 哈希表的历史 哈希散列的想法在不同的地方独立出现。1953 年 1 月,汉斯彼得卢恩 ( Hans Peter Luhn ) 编写了一份IBM内部备忘录,其中使用了散列和链接。开放寻址后来由 AD Linh 在 Luhn 的论文上提出。大约在同一时间,IBM Researc…

项目进度管理

第3 章 项目进度管理 3.1 概述 1.项目进度管理是指在项目实施过程中,对各阶段的进展程度和项目最终完成的期限所进行的管理,是在 规定的时间内,拟定出合理且经济的进度计划(包括多级管理的子汁划),在执行该计划的过程…

常见的限流算法的原理以及优缺点

原文网址:常见的限流算法的原理以及优缺点_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍限流常用的算法及其优缺点。 常用的限流算法有: 计数器(固定窗口)算法滑动窗口算法漏桶算法令牌桶算法 下面将对这几种算法进行分别介绍…

tmux的简单使用

文章目录一、认识tmux1.1 会话1.2 tmux的作用1.3 tmux的安装二、tmux的使用2.1 会话管理2.1.1 创建会话2.1.2 退出会话2.1.3 从终端环境进入会话2.1.4 查看会话列表2.1.5 销毁会话2.1.6 重命名会话2.2 窗口管理2.3 窗格管理一、认识tmux 1.1 会话 命令行的典型使用方式是&…

rocketmq是如何消费

拉取消息的请求都在pullRequestQueue队列里, 拉取消息成功后设置下一次需要拉取的offset, boolean dispatchToConsume processQueue.putMessage(pullResult.getMsgFoundList()); 这个方法会把拉取回来的消息放进msgTreeMap里面 然后消费拉取回来的消…

MongoDB副本集成员如何复制新数据

复制是指在多台服务器上保持相同的数据副本。MongoDB 实现此功能的方式是保存操作日志(oplog),其中包含了主节点执行的每一次写操作。oplog 是存在于主节点 local 数据库中的一个固定集合。从节点通过查询此集合以获取需要复制的操作。 每个…

Solving Inverse Problems With Deep_Neural Networks – Robustness Included_

作者:Martin Genzel, Jan Macdonald, and Maximilian Marz期刊:preprint arXiv时间:2020代码链接:代码论文链接:论文 1 动机与研究内容 最近工作发现深度神经网络对于图像重构的不稳定(instabilities),以…

记一次漏洞挖掘【网络安全】

漏洞信息 从CVE-2019-10999查看该CVE的基础信息得知,这是一个栈溢出漏洞,攻击者在已登录的情况下可以通过向wireless.htm发送一个超长的WEPEncryption参数导致栈溢出,从而执行任意命令攻击. 现在我们利用Shambles Desktop工具确定这个漏洞的…

单商户商城系统功能拆解23—用户标签

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

在Windows使用VSCode搭建嵌入式Linux开发环境

在Windows使用VSCode搭建嵌入式Linux开发环境 百问网已经制作好了完备的Ubuntu镜像,可以从这里下载: 链接:https://pan.baidu.com/s/1vw4VUV_Mvt0HXz8IC66ACg 提取码:iftb 我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始…

孙宇晨2022釜山区块链周演讲:区块链是未来数字城市发展基石

据韩国媒体全球经济新闻10月27日报道,波场TRON创始人孙宇晨线上出席了2022 釜山区块链周(Blockchain Week in Busan 2022,以下简称BWB 2022),并发表《 The Cities of Tomorrow》主题演讲。孙宇晨表示,“区块…

生产环境数据库表迁移实践集锦

数据库表迁移是开发者必须要掌握的一种能力,对中高级开发者来说更是如此。工作中随着公司业务不断发展、系统架构的慢慢调整演化,迁移数据库表是不可避免的。由于数据是公司最最核心的资产,所以对生产环境数据库表的迁移并不是谁都可以去实施…

Web服务器、Ftp服务器、DNS服务器搭建【高级路由协议与实验04-2】

上一篇自学练习了如何搭建web服务器 文章目录网络设置1.修改配置文件2.改成桥接模式访问外网3.选择网卡4.重启网卡一、web服务器补充:步骤1.安装httpd软件包2.将httpd服务设为开始自启动,并启动该服务3.查看httpd服务是否启动4.在防火墙开放80端口并查看…

小白学习spring第一天

第二章:Spring 第1节:概述 1.1 介绍 heap stack Spring是一个分层的Java SE/EE full-stack(一站式)轻量级开源框架,以 IoC(Inverse Of Control:控制反转)和 AOP(Aspec…

力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树

文章目录738. 单调递增的数字思路难点:遍历顺序难点:设置flag714. 买卖股票的最佳时机含手续费贪心思路难点968. 监控二叉树思路难点:如何隔两个节点放一个摄像头738. 单调递增的数字 力扣题目链接 当且仅当每个相邻位数上的数字 x 和 y 满…