sklearn.metrics中micro和macro的区别

news/2025/1/19 1:28:00/

sklearn安装

先看以下示例,区分micromacro的区别,这里直接调用sklearn封装好的接口,如果没有安装sklearn可以使用以下命令进行安装:

pip install scikit-learn

如果直接使用

pip install sklearn

是没有作用的,将会安装一个未知的第三方库。

micro和macro区别

先看一段简单的代码示例:

from sklearn.metrics import precision_score, recall_score, f1_scorea = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3] #真实
b = [1, 1, 2, 1, 2, 2, 2, 2, 3, 1, 3, 3] #预测print(precision_score(a, b, average='micro'), precision_score(a, b, average='macro'))
print(recall_score(a, b, average='micro'), recall_score(a, b, average='macro'))
print(f1_score(a, b, average='micro'), f1_score(a, b, average='macro'))'''
0.6666666666666666 0.7000000000000001
0.6666666666666666 0.6722222222222222
0.6666666666666666 0.6626984126984127
'''

我们可以构建混淆矩阵进行说明,混淆矩阵的四个基本概念:

  • TP:true positive,指的是正例,表示预测结果为真,标签的结果为真。
  • FP:false positive,指的是假阳,表示预测结果为真,标签的结果为假。
  • FN:false negative,指的是假阴,表示预测结果为假,标签的结果为真。
  • TN:false negative,指的是假阳,表示预测结果为假,标签的结果为假。

所以可以对上述实例构建混淆矩阵

1类2类3类总数
TP2338
FP2204
FN1124
TN76720

precision、recall和F1计算公式如下所示
precision=TPTP+FPprecision=\frac{TP}{TP+FP} precision=TP+FPTP

reall=TPTP+FNreall=\frac{TP}{TP+FN} reall=TP+FNTP

F1=2∗precision∗recallprecision+recallF1=\frac{2*precision*recall}{precision+recall} F1=precision+recall2precisionrecall

micro:利用总数的TP、FP和FN进行计算
micro−precision=88+4=0.66666micro-precision=\frac{8}{8+4}=0.66666 microprecision=8+48=0.66666

micro−recall=88+4=0.66666micro-recall=\frac{8}{8+4}=0.66666 microrecall=8+48=0.66666

micro−F1=2∗0.66∗0.660.66+0.66=0.666micro-F1=\frac{2*0.66*0.66}{0.66+0.66}=0.666 microF1=0.66+0.6620.660.66=0.666

macro:先计算各个类别的TP、FP和FN,在进行汇总计算
macro−precision=1n∑i=1nprecisioni=13(22+2+33+2+33+0)=710macro-precision=\frac{1}{n} \sum_{i=1}^n precision_i=\frac{1}{3}(\frac{2}{2+2}+\frac{3}{3+2}+\frac{3}{3+0})=\frac{7}{10} macroprecision=n1i=1nprecisioni=31(2+22+3+23+3+03)=107

macro−recall=1n∑i=1nrecalli=13(22+1+33+1+33+2)=121180=0.67222macro-recall=\frac{1}{n} \sum_{i=1}^n recall_i=\frac{1}{3}(\frac{2}{2+1}+\frac{3}{3+1}+\frac{3}{3+2})=\frac{121}{180}=0.67222 macrorecall=n1i=1nrecalli=31(2+12+3+13+3+23)=180121=0.67222

macro−F1=1n∑i=1nF1i=0.66269macro-F1=\frac{1}{n} \sum_{i=1}^n F1_i=0.66269 macroF1=n1i=1nF1i=0.66269

通过上述示例就可以清楚地知道micro和macro的区别了。

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

相关文章

Java真的不难(五十二)Stream流的深入理解与流式编程

Stream流的深入理解与流式编程: 在今年年初小应学长也写过Stream与Lambda的两篇文章,今天先将两者结合起来进行流式编程 一、关于这两者 Stream与Lambda都是Java8引入的新概念,lambda在Java编程中对于函数式编程的支持,有助于代…

const成员,流插入,流提取重载,初始化列表!(6千字长文详解!)

c详解之const成员&#xff0c;流插入&#xff0c;流提取重载&#xff0c;初始化列表&#xff01; 文章目录c详解之const成员&#xff0c;流插入&#xff0c;流提取重载&#xff0c;初始化列表&#xff01;<< 流插入 和 >> 流提取的重载解决共有成员函数问题链式访问…

d不变放进只读节,实现强制不变

原文 目前,D编译器把串字面放进只读节中,但大多数其他类型静态不变数据没有针对恶意写入保护. 这里是不变崩溃的例子. 问题是,抛异常时,d运行时修改了静态不变的异常实例.问题也与它有关. 如果把不变对象放进只读段中,且运行时任意写,都触发段错误,那么更易解决此类问题.微控制…

【推荐】安全访问服务边缘(SASE)资料汇总合集24篇

Secure Access Service Edge (SASE) 是Gartner推出的一个新的技术理念。SASE将 SD-WAN和网络安全解决方案&#xff08;FWaaS、CASB、SWG 和ZTNA&#xff09;融合到统一的云原生服务中。SASE是Gartner最新提出的一个技术理念&#xff0c;SASE用于从分布式云服务交付聚合的企业网…

vue后台系统管理项目-商城轮播图管理功能

商城轮播图管理功能 功能介绍&#xff1a; 1.轮播图列表分页功能&#xff1b; 2.轮播图添加功能&#xff1b; 3.轮播图编辑功能&#xff1b; 4.轮播图删除功能&#xff1b; 5.轮播图启用禁用功能&#xff1b; 6.轮播图获取排序号功能&#xff1b; 7.轮播图查看详情功能&#xf…

前端:vue-element-admin 搭建踩坑笔记

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

小红书素人怎么找?素人投放需要注意什么?

小红书素人怎么找&#xff1f;素人投放需要注意什么? 在小红书上做营销推广&#xff0c;如果是投放给素人&#xff0c;可以帮助你在短时间内建立起对品牌的认知&#xff0c;那么&#xff0c;素人怎么找呢&#xff1f; 一般都是从小红书官方小程序里寻找。 我们可以在小红书…

Linux编辑器-vim的使用

vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以在终端运行&#xff0c;也可以运行于xwindow、 mac o…