成为AI产品经理——模型评估(混淆矩阵)
一、混淆矩阵
1.混淆矩阵的介绍
混淆矩阵有两个定义positive(正例)和negative(反例)。分别代表模型结果的好和坏。
下图就是一个分类问题的混淆矩阵。横行代表真实的情况,而竖行代表预测的结果。

为了便于理解,我在这里举一个分出瓜的好坏的分类问题。
TP:True Positive,真正例。表示这个瓜实际上是一个好瓜,预测出来的结果也是好瓜,所以它是一个真的好瓜,是一个真正例。预测结果正确。
FP:False Positive,假正例。表示这个瓜本身是一个坏瓜,预测结果却是一个好瓜,所以它是一个假的好瓜,是一个假正例。预测结果错误。
FN:False Negative,假反例。表示这个瓜本身是一个好瓜,预测结果是坏瓜,所以它是一个假的坏瓜,是一个假反例。预测结果错误。
TN:Truen Negative,真反例。表示这个瓜本身是一个坏瓜,预测结果也是一个坏瓜,所以它是一个真的坏瓜,是一个真反例。预测结果正确。
需要明确,明确T和F代表模型预测结果的对错,P和N代表模型预测出来的结果。
接下来,我们举个例子,便于我们学习混淆矩阵指标:准确率、精准率和召回率。
有100个瓜,实际上由40个好瓜,60个坏瓜。但是模型预测出来的结果为50个好瓜,50个坏瓜。在这50个好瓜里面,有30个预测对了,有20个预测错了。

此时预测的50个好瓜里面,30个预测对了,即真好瓜(TP);20个预测错了,即假好瓜。 所以TP = 30,FP = 20。

我们可以知道,40个好瓜=真的好瓜+预测错的坏瓜;60个坏瓜 = 真的坏瓜+假的好瓜。如下图:

根据以上式子,我们计算出了混淆矩阵所有的值。

根据以上条件,我们能够写出混淆矩阵。

我们期待的结果是预测结果和真实结果相一致,但是往往不太可能,所以我们需要评估的好坏,这里我们需要用到混淆矩阵的指标:准确率、精确率、召回率。
2.准确率
准确率是预测准确的样本数在所有预测样本数的比例。在我们这里就是预测的真的好瓜和真的坏瓜在总瓜数的占比。
准确率的计算公式为:
通过准确率我们可以看出模型的分类能力。
但是准确率的弊端是:如果在样本不均衡的情况下,占比大的对样本的影响比较大。
考虑一个极端的例子,其中有100个样本,其中99个属于类别A,1个属于类别B。如果一个模型将所有样本都预测为类别A,那么它的分子中,预测准确的A样本为99,预测准确的B样本为0,除以分母100。
准确率将是99%。尽管准确率很高,但模型对于类别B的预测几乎完全失败。所以这是不对的。
这种情况下,我们需要借助精准率(precision)。
3.精确率
精准率(precision),是用来计算模型预测的多准的指标,又名查准率。
精准率的计算公式为:
精确率关注的是在所有模型认为是正类别的样本中,有多大比例是真实的正类别。因此,精确率通常被解释为模型有多准确地"查准"了正类别,即模型有多能够确保它的正类别预测是准确的。
在一些应用中,比如垃圾邮件过滤,我们希望模型尽可能地准确地标识出正类别(即真正的垃圾邮件),同时避免将负类别(即正常邮件)错误地分类为正类别。在这种情况下,我们希望精确率尽可能高,以确保模型的正类别预测是可靠的。
3.召回率
如果说精确度是模型预测的多准的指标,那么召回率就是模型广度的指标,又被称为查全率。
召回率的计算公式为:
公式表示需要分类的类别,在实际的该种类总数中,占比多少。好瓜在实际好瓜的总数是多少。所以召回率(查全率)是指模型在多大程度上能够预测出我需要的类别。
比如说:我有100个好瓜,你识别出50个,那么你的就在识别出我所需要的类别的能力就有50%。
在实际的评估工作中,我们通常使用精确率和召回率来评估模型的效果。通过召回率看找到了多少我们想要找的好瓜,通过精确率来看我们找好瓜有多准。
召回率关注的是在实际为正类别的样本中,模型有多大程度地能够成功地识别出来。因此,召回率通常被解释为模型有多好地"查找"或"捕捉"了正类别,即模型有多能够找到所有实际存在的正类别样本。
在一些应用中,如医学诊断或欺诈检测,对于正类别的遗漏是不可接受的,因为这可能导致严重的后果。在这种情况下,我们希望模型的召回率尽可能高,以确保尽可能多地捕捉到所有真实的正类别。
由于精确率和召回率相互矛盾。模型如果想要查找的更准确,会减少识别的范围,所以精准率高,召回率低;反之,如果想要召回率高一点,那么精确率也会随之下降。
所以我们一般给算法同学提需求的时候会同时考虑。比如:30%的召回率下精准率提升5倍。
4.F1值
F1指标可以综合反映召回率和精准率,F1值越高,代表模型在精确率和召回率的综合表现越高。
F1的计算公式:
5.总结
准确率:比较容易理解,在样本不均衡的时候指标偏差过大。
精确率:模型预测的准确度。宁肯不预测,也不能预测错,秉持宁缺毋滥的原则。比如在刷脸支付的场景下,我们宁可检测不通过,而不能预测出错。
召回率:关注筛选的结果是不是全面的场景,秉持宁可错杀一千,也不放过一个的原则。

PS:如果对于这几个指标还是不明白,推荐大家看这篇博文,讲的比较清晰。
准确率,精准率,召回率,真正率,假正率,ROC/AUC-CSDN博客
参考文献: 刘海丰——《成为AI产品经理》
相关文章:
成为AI产品经理——模型评估(混淆矩阵)
一、混淆矩阵 1.混淆矩阵的介绍 混淆矩阵有两个定义positive(正例)和negative(反例)。分别代表模型结果的好和坏。 下图就是一个分类问题的混淆矩阵。横行代表真实的情况,而竖行代表预测的结果。 为了便于理解&…...
Git_git相关指令 高阶
git config pull.rebase false git config pull.rebase false是做什么的_fury_123的博客-CSDN博客 git commit 命令详解_gitcommit_辰风沐阳的博客-CSDN博客...
PC企业微信http协议逆向接口开发,发送大视频文件
产品说明 一、 hook版本:企业微信hook接口是指将企业微信的功能封装成dll,并提供简易的接口给程序调用。通过hook技术,可以在不修改企业微信客户端源代码的情况下,实现对企业微信客户端的功能进行扩展和定制化。企业微信hook接口…...
hyper-V操作虚拟机ubuntu 22.03
安装hyper-V 点击卸载程序 都勾选上即可 新建虚拟机,选择镜像文件 选择第一代即可 设置内存 配置网络 双击 启动安装虚拟机 输入用户名 zenglg 密码:LuoShuwen123456 按照enter键选中openssh安装 安装中 安装完成 选择重启 输入用户名、密码...
Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具
Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具 名称: spring 命令执行 (CVE-2022-22947) 描述: Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问A…...
代理模式-C++实现
代理模式是一种结构型设计模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者无法引用另一个对象,这个时候就需要一个代理对象充当客户端和目标对象之间的中介。 代理模式就是代理对象具备目标对象的所有…...
从 0 到 1 开发一个 node 命令行工具
G2 5.0 推出了服务端渲染的能力,为了让开发者更快捷得使用这部分能力,最写了一个 node 命令行工具 g2-ssr-node:用于把 G2 的 spec 转换成 png、jpeg 或者 pdf 等。基本的使用如下: $ g2-ssr-node g2png -i ./bar.json -o ./bar.…...
VsCode中使用功能vite创建vue3+js项目报错
VsCode中使用功能vite创建vue3js项目报错 VsCode中使用功能vite创建vue3js项目import模块报错如下处理方法 VsCode中使用功能vite创建vue3js项目import模块报错如下 处理方法 在项目根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./&q…...
COGVLM论文解读(COGVLM:VISUAL EXPERT FOR LARGE LANGUAGE MODELS)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、摘要二、引言三、模型方法1、模型思路2、融合公式 四、训练方法总结 前言 2023年5月18日清华&智谱AI发布并开源VisualGLM-6B以来,清华KEG&…...
Flink-时间流与水印
时间流与水印 一、背景二、时间语义1.事件时间(event time)2.读取时间(ingestion time)3.处理时间(processing time) 三、水印-Watermarks1.延迟和正确性2.延迟事件3.顺序流4.无序流5.并行流 四、Windows1.…...
BiLSTM-CRF的中文命名实体识别
项目地址:NLP-Application-and-Practice/11_BiLSTM-ner-bilstm-crf/11.3-BiLSTM-CRF的中文命名实体识别/ner_bilstm_crf at master zz-zik/NLP-Application-and-Practice (github.com) 读取renmindata.pkl文件 read_file_pkl.py # encoding:utf-8import pickle# …...
paddle detection 训练参数
#####################################基础配置##################################### # 检测算法使用YOLOv3,backbone使用MobileNet_v1,数据集使用roadsign_voc的配置文件模板,本配置文件默认使用单卡,单卡的batch_size=1 # 检测模型的名称 architecture: YOLOv3 # 根据…...
用bat制作图片马——一句话木马
效果图 代码 ECHO OFF TITLE PtoR MODE con COLS55 LINES25 color 0A:main cls echo.当前时间:%date% %time% echo.欢迎使用图片马制作工具 echo.请确保图片和php在同一路径下 echo.echo 请将图像文件拖放到此窗口并按 Enter: set /p "imagefile&q…...
json_encode() 返回 false
当 json_encode() 返回 false 时,表示 JSON 编码过程失败。这通常是因为要编码的数据包含了无效的 UTF-8 字符,而默认情况下 json_encode() 会对无效的 UTF-8 字符进行严格的处理 通过添加 JSON_INVALID_UTF8_IGNORE 选项,你告诉 json_encod…...
Android-Jetpack--Hilt详解
善学者尽其理,善行者究其难 一,定义 Hilt是针对dagger2的二次封装依赖注入框架,至于什么是依赖注入,在Android开源框架--Dagger2详解-CSDN博客 中已经讲解,建议大家先去了解Dagger2之后,再来看Hilt。这样就…...
Docker 下载加速
文章目录 方式1:使用 网易数帆容器镜像仓库进行下载。方式2:配置阿里云加速。方式3:方式4:结尾注意 Docker下载加速的原理是,在拉取镜像时使用一个国内的镜像站点,该站点已经缓存了各个版本的官方 Docker 镜…...
1091 Acute Stroke (三维搜索)
题目可能看起来很难的样子,但是看懂了其实挺简单的。(众所周知,pat考察英文水平) 题目意思大概是:给你一个L*M*N的01长方体,求全为1的连通块的总体积大小。(连通块体积大于T才计算在内…...
java elasticsearch 桶聚合(bucket)
Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。 实例: // 首先创建RestClient,后续章节通过RestClient对象进行…...
【人生苦短,我学 Python】(4)Python 常用内置数据类型 II —— 序列数据类型(str、tuple、list、bytes和bytearray)
目录 简述 / 前言1. str 数据类型(字符串)1.1 str对象1.2 str对象属性和方法1.3 字符串编码1.4 转义字符1.5 字符串的格式化 2. tuple 数据类型(元组)2.1 创建元组对象 3. list 数据类型(列表)3.1 创建列表…...
Android 9.0 系统默认显示电量百分比
Android 9.0 系统默认显示电量百分比 近来收到项目需求需要设备默认显示电量百分比,具体修改参照如下: /frameworks/base/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java private void updateShowPercent() {final boolean showin…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
