介绍平衡准确率(Balance Accuracy)和加权 F1 值(Weighted F1)

news2024/9/28 15:27:44

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


先复习一下查准率、召回率和 F1 分数:

  • 查准率是对预测结果而言,每个类别模型预测正确的比例。

  • 召回率是对样本标签而言,每个类别中有多少被预测正确了。

  • F1 分数是查准率和召回率的调和平均值

  • 定义二分类结果的混淆矩阵,纵轴从上往下为预测结果的 1 和 0,横轴从左往右为真实标签的 1 和 0。左上到右下的对角线:TP、TN。左下到右上的对角线:FN、FP。

  • 其实就是分母不同,查准率是每个类别预测结果的样本数,而召回率则是每个类别样本标签的样本数。

在这里插入图片描述

为什么要使用平衡准确率(Balance Accuracy)和加权 F1 值(Weighted F1)?

  • 首先,我们需要理解这两个指标是用来评估分类模型的性能的。在机器学习中,我们经常需要处理不平衡的数据集,也就是说,某些类别的样本数量远多于其他类别。在这种情况下,传统的准确率可能会产生误导,因为模型可能会倾向于预测数量较多的类别,从而得到较高的准确率,但对于数量较少的类别,其预测性能可能很差

  • 这时候,平衡准确率就派上用场了。平衡准确率是对所有类别的准确率的平均,它对每个类别的重视程度是一样的,无论这个类别的样本数量多少。因此,它可以更好地反映模型在各个类别上的性能,特别是在处理不平衡数据集时。

  • 然后,我们来看看加权 F1 值。F1 值是精确率(Precision)和召回率(Recall)的调和平均数,它同时考虑了模型的精确率和召回率。加权 F1 值则是对每个类别的 F1 值进行加权平均,权重通常是每个类别的样本数量。因此,加权 F1 值可以反映出模型在各个类别上的性能,并且对样本数量多的类别给予更高的权重。

总的来说,平衡准确率和加权 F1 值都是在评估分类模型性能时非常重要的指标,它们可以帮助我们更全面、更准确地了解模型的性能

平衡准确率(Balance Accuracy)

平衡准确率用于处理二元分类问题中的标签不平衡数据集。它被定义为每个类别上获得的召回率的平均值。

balanced_accuracy_score 函数是 scikit-learn 库中的一个实现,它可以计算平衡准确率,从而避免在标签不平衡的数据集上过高估计性能。当参数 adjusted 设置为 False 时,平衡准确率的最佳值为 1,最差值为 0。下面是一个常用的计算示例:

from sklearn.metrics import balanced_accuracy_score

y_true = [0, 1, 0, 0, 1, 0]
y_pred = [0, 1, 1, 0, 0, 0]

balanced_accuracy_score(y_true, y_pred, adjusted=False)

有些研究文献提出了平衡准确率的替代定义。scikit-learn 对平衡准确率的定义是,它等同于具有类平衡样本权重的 accuracy_score,且与二进制案例具有相同的理想属性。对于二元分类问题,平衡准确率是灵敏度(真阳性率)和特异性(真阴性率)的算术平均值。具体的计算公式如下:

balanced-accuracy = 1 2 ( T P T P + F N + T N T N + F P ) \texttt{balanced-accuracy} = \frac{1}{2}\left( \frac{TP}{TP + FN} + \frac{TN}{TN + FP}\right ) balanced-accuracy=21(TP+FNTP+TN+FPTN)

如果这个分类器在两个类别上的表现一样好,那么这个术语就简化为传统的准确率(即正确预测数除以总预测数)。平衡准确率取值范围从 0 到 1。当设置了 adjusted=True 时,它会重新调整到范围 1 1   −   n _ c l a s s e s \frac{1}{1 \ -\ n\_classes} 1  n_classes1 到 1 之间,随机性能得分为 0。

加权 F1 值(Weighted F1)

F1 分数是评估模型在二分类任务中预测性能的常用指标,综合考虑了查准率和召回率。F1 分数是查准率和召回率的调和平均值,其取值范围为 0 到 1,其中,1 表示查准率和召回率均达到完美,而 0 则表示查准率和召回率均未达到完美。

F1-Score = 2 × P r e c i s i o n × R e c a l l P r e c i s i o n + R e c a l l \texttt{F1-Score} = 2 \times \frac{Precision \times Recall}{Precision + Recall} F1-Score=2×Precision+RecallPrecision×Recall

F1 分数有多种变体,包括加权 F1 分数、宏观 F1 分数和微观 F1 分数,这些都适用于多元分类问题或需要对类别进行加权的场景。

  • 宏观 F1 分数通过平均每个类别的 F1 分数进行计算(宏观让所有类别都有同等的权重,因此给予代表性不足的类别更高的权重),其中每个类别都被赋予相同的权重。这种方法假设所有类别都同等重要,尽管在实际应用中可能并非如此。

  • 在每个测试案例都保证被准确分配到一个类别中的分类任务中,微观 F1 分数等同于准确率

  • 加权 F1 分数对每个类别的 F1 分数进行独立计算,但在求平均时,会根据每个类别的实例数量进行加权。这种方法考虑了类别不平衡的问题,因此是一个更现实的评估指标。如果在类别不平衡的情况下,你希望给予大类别更多的权重,那么加权 F1 分数是一个好的选择。

scikit-learn 库实现的 f1_score 函数计算 F1 分数,一个常用代码示例如下所示:

import numpy as np
from sklearn.metrics import f1_score

# Ground truth (true labels)
y_true = np.array([0, 1, 2, 0, 1, 2, 0, 1, 2])
# Predicted labels from your classifier
y_pred = np.array([0, 1, 2, 0, 1, 2, 0, 2, 2])  # The 8th label is misclassified

# Calculate Macro F1 Score
macro_f1 = f1_score(y_true, y_pred, average='macro')
print(f"Macro F1 Score: {macro_f1}")

# Calculate Micro F1 Score
micro_f1 = f1_score(y_true, y_pred, average='micro')
print(f"Micro F1 Score: {micro_f1}")

# Calculate Weighted F1 Score
weighted_f1 = f1_score(y_true, y_pred, average='weighted')
print(f"Weighted F1 Score: {weighted_f1}")

选择那种平均值,取决于具体情况,包括不同类别的重要性和样本分布的综合考虑。对于微观、宏观和加权平均 F1 分数的清晰解释,您可以参考这篇 Towards Data Science 的博客。通过简单的示例,帮助您理解多类别分类中微观平均、宏观平均和加权平均 F1 分数背后的概念。


📚️ 参考链接:

  • sklearn.metrics.balanced_accuracy_score

  • User Guide - 3.3.2.4. Balanced accuracy score

  • sklearn.metrics.f1_score

  • 3.3.2.9. Precision, recall and F-measures

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

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

相关文章

电机的极数和槽数,机械角度和电角度,霍尔IC,内外转子

什么是电机的极数和槽数? 【第7集】② 正弦波驱动的转矩脉动、正弦电流的时序和相位变化、超前角控制(超前角调整)、正弦波驱动的各种波形 - 电源设计电子电路基础电源技术信息网站_罗姆电源设计R课堂 (rohm.com.cn) 下面为您介绍表示电机…

算法【线性表的查找-折半查找/二分查找/对分查找】

线性表的查找-折半查找/二分查找/对分查找 折半查找概念查找过程折半查找算法: (非递归算法) 折半查找法的性能分析性能分析:平均查找长度ASL: 复杂度折半查找法的特点: 折半查找概念 折半查找,也称为二分查找,是一种…

【JS】解构赋值注意点,解构赋值报错

报错代码 const 小明 { email: 6, pwd: 66 } const 小刚 { email: 9, pwd: 99 }const { email } 小明 const { email } 小刚 报错图 原因 2个常量重复,重复在同一个作用域内是不能重复的,例如大括号内{const a 1; const a 2} 小伙伴A提问 问&…

从头构建gpt2 基于Transformer

从头构建gpt2 基于Transformer VX关注{晓理紫|小李子},获取技术推送信息,如感兴趣,请转发给有需要的同学,谢谢支持!! 如果你感觉对你有所帮助,请关注我。 源码获取 VX关注晓理紫并回复“chatgpt…

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题 鼠标控制摄像机旋转添加Input轴计算旋转角度通过轴事件控制旋转 问题和原因问题原因 解决办法增加触摸控制旋转代码触屏操作下屏蔽鼠标轴响应事件 鼠标控制摄像机旋转 通过Mouse X和Mouse Y控制摄像机旋转。 添加Input轴 计算旋转角度 通过…

10 计算机结构

冯诺依曼体系结构 冯诺依曼体系结构,也被称为普林斯顿结构,是一种计算机架构,其核心特点包括将程序指令存储和数据存储合并在一起的存储器结构,程序指令和数据的宽度相同,通常都是16位或32位 我们常见的计算机,笔记本…

Android 性能优化--APK加固(1)混淆

文章目录 为什么要开启混淆如何开启代码混淆如何开启资源压缩代码混淆配置代码混淆后,Crash 问题定位结尾 本文首发地址:https://h89.cn/archives/211.html 最新更新地址:https://gitee.com/chenjim/chenjimblog 为什么要开启混淆 先上一个 …

计算机二级Python刷题笔记------基本操作题11、14、17、21、30(考察列表)

文章目录 第十一题(列表遍历)第十四题(len)第十七题(len、insert)第二十一题(append)第三十题(二维列表) 第十一题(列表遍历) 题目&a…

【RT-Thread应用笔记】英飞凌PSoC 62 + CYW43012 WiFi延迟和带宽测试

文章目录 一、安装SDK二、创建项目三、编译下载3.1 编译代码3.2 下载程序 四、WiFi测试4.1 扫描测试4.2 连接测试 五、延迟测试5.1 ping百度5.2 ping路由器 六、带宽测试6.1 添加netutils软件包6.2 iperf命令参数6.3 PC端的iperf6.4 iperf测试准备工作6.5 进行iperf带宽测试6.6…

力扣日记3.3-【回溯算法篇】332. 重新安排行程

力扣日记:【回溯算法篇】332. 重新安排行程 日期:2023.3.3 参考:代码随想录、力扣 ps:因为是困难题,望而却步了一星期。。。T^T 332. 重新安排行程 题目描述 难度:困难 给你一份航线列表 tickets &#xf…

NLP-词向量、Word2vec

Word2vec Skip-gram算法的核心部分 我们做什么来计算一个词在中心词的上下文中出现的概率? 似然函数 词已知,它的上下文单词的概率 相乘。 然后所有中心词的这个相乘数 再全部相乘,希望得到最大。 目标函数(代价函数&#xff0…

C语言数组全面解析:从初学到精通

数组 1. 前言2. 一维数组的创建和初始化3. 一维数组的使用4. 一维数组在内存中的存储5. 二维数组的创建和初始化6. 二维数组的使用7. 二维数组在内存中的存储8. 数组越界9. 数组作为函数参数10. 综合练习10.1 用函数初始化,逆置,打印整型数组10.2 交换两…

[计算机网络]--I/O多路转接之poll和epoll

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、poll函…

python复盘(1)

1、变量名的命名规则 #3、变量名的命名规则:可以用中文作为变量名;其他和go语言一样 # 变量名可以用数字、字母、下划线组成,但是数字不能作为开头 # 变量名不能使用空格,不能使用函数名或关键字 # 变量名最好能表示出他的作用2、…

【PyQt】16-剪切板的使用

文章目录 前言一、代码疑惑快捷键 二、现象2.1 复制粘贴文本复制粘贴 2.2 复制粘贴图片复制粘贴 2.3 复制粘贴网页 总结 前言 1、剪切板的使用 2、pycharm的编译快捷键 3、类的属性和普通变量的关系 4、pyqt应该养成的编程习惯-体现在代码里了,自己看看。 一、代码…

springboot+vue学生信息管理系统学籍 成绩 选课 奖惩,奖学金缴费idea maven mysql

技术栈 ide工具:IDEA 或者eclipse 编程语言: java 数据库: mysql5.7 框架:ssmspringboot都有 前端:vue.jsElementUI 详细技术:springbootSSMvueMYSQLMAVEN 数据库工具:Navicat/SQLyog都可以学生信息管理系统主要实现角…

源码视角,vue3为什么推荐用ref,而不是reactive

ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型,而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象,但 Vue3 官方文档更推荐使用 ref。 我的想法,ref就是比reactive好用,官方也…

JAVA读取局域网电脑文件全流程

JAVA读取局域网电脑文件全流程 需求设计实现1、创建非微软用户(1)win11 不可达电脑开启网络共享2、设置文件夹共享3、高级共享设置打开文件夹与打印机共享3、java编码 需求 需要读取内网一台电脑中的文件并解析数据,但机器不可接入办公网&am…

京东云硬钢阿里云:承诺再低10%

关注卢松松,会经常给你分享一些我的经验和观点。 阿里云刚刚宣布史上最大规模的全线产品降价20%,这热度还没过,京东云当晚就喊话:“随便降、比到底!,全网比价,击穿低价,再低10%”,并…

贪心(基础算法)--- 区间选点

905. 区间选点 思路 (贪心)O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间,如果当前区间左端点不包含在前一个区间中,则选取新区间,所选点个数加1,更新当前区间右端点。如果包含,则跳…