一文带你搞懂sklearn.metrics混淆矩阵

news2025/1/10 20:32:55

一般的二分类任务需要的评价指标有4个

  • accuracy
  • precision
  • recall
  • f1-score

四个指标的计算公式如下

accuracy = \frac{TP+TN}{TP+TN+FP+FN}

precision=\frac{TP}{TP+FP}

recall=\frac{TP}{TP+FN}

 F_1-score=\frac{2*precision*recall}{precision+recall}

计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵

  • TP (True Positive)
  • FP (False Positive)
  • TN (True Negative)
  • FN (False Negative)
混淆矩阵实际值
01
预测值0TNFP
1FNTP

这里我给出的混淆矩阵是按照sklearn-metrics-confusion_matrix的形式绘制的。

Negative中文译作阴性,一般指标签0;Positive中文译作阳性,一般指标签1。

True中文译作预测正确;False中文译作预测错误。

TN 预测正确(True)并且实际为阴性(Negative)即实际值和预测值均为Negative

TP 预测正确(True)并且实际为阳性(Positive)即实际值和预测值均为Positive

FN 预测错误(False)并且实际为阴性(Negative)即实际值为Negative,预测值为Positive

FP 预测错误(False)并且实际为阳性(Positive)即实际值为Positive,预测值为Negative

下面以实际代码为例进行介绍

from sklearn import metrics
print(metrics.confusion_matrix(y_true=[0, 0, 0, 1, 1, 1],
    y_pred=[1, 1, 1, 0, 1, 0]))

这里的y_true是实际值,y_pred是预测值,可以观察到

TN=0,没有样本实际值和预测值同时为0

TP=1,只有第5个样本实际值和预测值均为1

FN=3,第1,2,3个样本实际值为0且预测值为1

FP=2,第4,6个样本实际值为1且预测值为0

输出结果也和我们观察的一致

[[0 3]
 [2 1]]

编写函数根据混淆矩阵计算 accuracy, precision, recall, f1-score

def cal(array):
    tp = array[1][1]
    tn = array[0][0]
    fp = array[0][1]
    fn = array[1][0]
    a = (tp+tn)/(tp+tn+fp+fn)
    p = tp/(tp+fp)
    r = tp/(tp+fn)
    f = 2*p*r/(p+r)
    print(a,p,r,f)

使用编写的函数cal计算该混淆矩阵的四项指标,并与metric自带的分类报告(classification_report)函数的结果进行比较,这里第三个参数digits=4表示保留4位小数

cal([[0, 3],[2, 1]])
print(metrics.classification_report(y_true=[0, 0, 0, 1, 1, 1], y_pred=[1, 1, 1, 0, 1, 0], digits=4))

运行结果如下,可以发现两者的计算结果一致。

0.16666666666666666 0.25 0.3333333333333333 0.28571428571428575
              precision    recall  f1-score   support

           0     0.0000    0.0000    0.0000         3
           1     0.2500    0.3333    0.2857         3

    accuracy                         0.1667         6
   macro avg     0.1250    0.1667    0.1429         6
weighted avg     0.1250    0.1667    0.1429         6

这里需要补充说明一下,为什么0那一行和1那一行都有precision, recall, f1-score。

一般来说,我们通常计算的这三项指标均是把1视为阳性,把0视为阴性,以1作为研究对象。所以1那一行的三项指标的值和cal函数计算的结果一致。而0那一行表示把0作为研究对象。

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

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

相关文章

周杰伦腾格尔晚上八点同时开线上演唱会,究竟是巧合还是刻意安排

从日历上面看,2022年11月19日,是一个再平凡不过的日子,不过有了周杰伦和腾格尔的加持,这个平凡的日子也变得不平凡了。根据腾格尔老师本人透露,他准备在11月19日,在某音平台开启线上演唱会,为歌…

智慧实验室解决方案-最新全套文件

智慧实验室解决方案-最新全套文件一、建设背景二、建设架构智慧实验室建设核心目标三、建设方案四、获取 - 智慧实验室全套最新解决方案合集一、建设背景 当前高校和中小学的智慧校园建设正如火如荼地进行中,智慧实验室建设属于“智慧校园”建设的重要组成部分之一…

ctf_BUUCTF_web(1)

文章目录BUUCTF_webSQL注入1. [极客大挑战 2019]EasySQL2. [SUCTF 2019]EasySQL3.[强网杯 2019]随便注4.[极客大挑战 2019]BabySQL5.[BJDCTF2020]Easy MD56.[极客大挑战 2019]HardSQL7.[GXYCTF2019]BabySQli8.[GYCTF2020]Blacklist9.[CISCN2019 华北赛区 Day2 Web1]Hack World1…

面试:HTTP 的长连接和短连接

https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/ 一文搞懂 HTTP 的长连接和短连接_文晓武的博客-CSDN博客 1、HTTP 协议与 TCP/IP 协议的关系 HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。HTTP 属于应用层协议,在传输层使用 TCP…

区块链交易明细中各字段的含义

Transaction Hash:标识本次交易的 hashStatus:交易状态Block:7768188 表示本次块高,217034 表示在 7768188 后面又新挖的区块数量,该数值会随着新区块增加而不断增长Timestamp:交易成功的时间戳From&#x…

直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析

文章目录前言一、转速闭环直流调速系统二、Matlab/Simulink仿真2.1.仿真电路分析2.2.仿真结果分析总结前言 变压调速是直流调速系统的主要调速方法,因此系统的硬件至少包含:可调直流电源和直流电机两部分。可调直流电源多采用直流PWM变换器,…

v-for的用法及key值原理

v-for的用途: (1)关键字: v-for遍历的时候,关键字有两个:in、of:两个关键字没有区别,用哪一个都行; (2)支持对象、数组、数字遍历&#xff1a…

java线程生命周期

如图 java线程的生命周期主要分为 新建: :新建这一刻 他会创建出一个线程对象 这个就是我们通过new线程类 这部操作实现的 当我们通过new出来的线程对象 执行 start方法之后 他就会进入第二个生命周期 就绪: 在这个过程中 他有执行资格 就是他是可以执行线程的程序的 但这个阶…

zk中session的基本原理、create、set、delete命令的使用(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 一、session基本原理 二、创建节点 create [-s] | [-e] 路径 数据 权限 还是一样的连接zk客户端 ./zkCli.sh 使用help查看命令 我们创建一个父节点,并存入数据 使用get来或者它的数据和状态信息 状态参…

【LeetCode】Day187-分割回文串

题目 131. 分割回文串【中等】 题解 如何判断字符串是回文串? 使用动态规划:f[i][j]代表s[i…j]是否是回文串,则有状态转移方程如下, 有了f[i][j],如何分割回文串? 利用回溯搜索,当s[0…i-1…

Spring参数校验

如何使用 Spring提供了简便的参数校验注解&#xff0c;不需要像以前一样if else去判断了&#xff0c;下面记录一下如何使用注解实现参数的校验 导入坐标 要使用各种注解完成参数的校验&#xff0c;需要导入hibernate-validator坐标以实现 <dependency><groupId>…

[Spring Cloud] nacos安装与使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

密码学消息鉴别

信息安全 完整性 1.数据完整性&#xff1a;数据未被篡改或损坏。数据是不可否认的&#xff0c;发送方和接收方不能抵赖处理了数据。 2.系统完整性&#xff1a;系统未被非授权使用。 真实性 确认实体是它声明的&#xff0c;适用于用户、进程等等的合法的信息&#xff08;是否真…

LVS-DR模式

文章目录一、LVS-DR集群介绍1、LVS-DR 工作原理2、 数据包流向分析3、LVS-DR 模式的特点4、LVS-DR中的ARP问题4.1 问题一4.2问题二二、构建LVS-DR集群的步骤实验环境准备&#xff1a;1、配置负载调度器&#xff08;192.168.2.66&#xff09;1.1 配置虚拟 IP 地址&#xff08;VI…

HTML+CSS+JS网页设计期末课程大作业—— 艺术官网17页(包含登陆注册)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业&#xff0c;Web大学生网页 HTML&#xff1a;结构 CSS&#…

力扣(LeetCode)22. 括号生成(C++)

回溯 括号合法的性质&#xff1a; 任意前缀的左括号数大于右括号数左括号和右括号的数量相等。 根据性质 &#xff0c; 写递归体 。 class Solution { public:vector<string> ans;vector<string> generateParenthesis(int n) {dfs(n,0,0,"");return …

Mosaic数据增强

paper&#xff1a;YOLOv4: Optimal Speed and Accuracy of Object Detection mosaic data augmentation最早是在YOLO v4的文章中提出的&#xff0c;但其实在ultralytics-YOLOv3中就已经实现了。具体就是将4张样本拼接成一张图&#xff0c;具有以下优点&#xff1a;&#xff08…

C++string—常用接口介绍+模拟实现+习题讲解

如果调试一个程序让你很苦恼&#xff0c;千万不要放弃&#xff0c;成功永远在拐角之后&#xff0c;除非你走到拐角&#xff0c;否则你永远不知道你离他多远&#xff0c;所以&#xff0c;请记住&#xff0c;坚持不懈&#xff0c;直到成功。 目录 前言 1.string类的常用接口 1.1s…

c++提高篇——模板(下)

c提高篇——模板&#xff08;下&#xff09;一、类模板二、类模板与函数模板区别三、类模板中成员函数创建时机四、类模板对象做函数参数一、类模板 类模板可以建立一个通用类&#xff0c;类中的成员数据类型可以不具体制定&#xff0c;用一个虚拟的类型来代表。 类模板的语法…

周赛补题

leetcode &#xff1a; 第一题https://leetcode.cn/problems/number-of-unequal-triplets-in-array/可以直接暴力 class Solution { public:int unequalTriplets(vector<int>& nums) {int sum 0;int n nums.size();for(int i 0; i < n; i ){for(int j i …