当前位置: 首页 > article >正文

别再傻傻分不清了!用Python代码实战带你搞懂准确率、精确率、召回率和F1分数

用Python代码实战解析分类模型四大核心指标在数据科学项目中评估分类模型性能是至关重要的一环。很多初学者虽然能背诵准确率、精确率、召回率和F1分数的定义但当面对实际数据集时仍然会困惑于这些指标的具体计算方式和应用场景。本文将通过Python代码实战带你从数据加载到指标计算彻底掌握这些核心评估指标。1. 理解基础概念与混淆矩阵在开始编码前我们需要明确几个关键术语。分类模型的预测结果可以归纳为四种情况from sklearn.metrics import confusion_matrix # 假设我们有以下真实标签和预测结果 y_true [1, 0, 1, 1, 0, 1, 0, 0] y_pred [1, 0, 0, 1, 0, 1, 1, 0] # 生成混淆矩阵 tn, fp, fn, tp confusion_matrix(y_true, y_pred).ravel() print(f真负例(TN): {tn}, 假正例(FP): {fp}, 假负例(FN): {fn}, 真正例(TP): {tp})这四种情况构成了混淆矩阵的基础实际\预测预测为正例预测为负例实际为正例TPFN实际为负例FPTN理解这个矩阵是计算所有指标的基础。让我们通过一个垃圾邮件分类的例子来具体说明TP(真正例)确实是垃圾邮件且被正确分类为垃圾邮件FP(假正例)正常邮件被误判为垃圾邮件FN(假负例)垃圾邮件被漏判为正常邮件TN(真负例)正常邮件被正确识别为正常邮件2. 从零实现四大指标计算2.1 准确率(Accuracy)的实现与局限准确率是最直观的指标表示模型预测正确的比例def accuracy(y_true, y_pred): correct sum(1 for t, p in zip(y_true, y_pred) if t p) return correct / len(y_true) # 使用sklearn验证 from sklearn.metrics import accuracy_score print(f自定义准确率: {accuracy(y_true, y_pred):.2f}) print(fsklearn准确率: {accuracy_score(y_true, y_pred):.2f})然而准确率在类别不平衡时会产生误导。假设我们有1000封邮件其中990封是正常邮件10封是垃圾邮件。如果一个模型简单地将所有邮件预测为正常邮件它的准确率高达99%但这个模型对垃圾邮件的识别完全失效。2.2 精确率(Precision)的实战计算精确率关注的是模型预测为正例的样本中实际为正例的比例def precision(y_true, y_pred): tp sum(1 for t, p in zip(y_true, y_pred) if t 1 and p 1) fp sum(1 for t, p in zip(y_true, y_pred) if t 0 and p 1) return tp / (tp fp) if (tp fp) 0 else 0 # 对比sklearn实现 from sklearn.metrics import precision_score print(f自定义精确率: {precision(y_true, y_pred):.2f}) print(fsklearn精确率: {precision_score(y_true, y_pred):.2f})在垃圾邮件检测中高精确率意味着被标记为垃圾邮件的邮件中确实大多是垃圾邮件。这对用户体验很重要因为把正常邮件误判为垃圾邮件(FP)会造成严重问题。2.3 召回率(Recall)的代码实现召回率衡量的是实际为正例的样本中被正确预测为正例的比例def recall(y_true, y_pred): tp sum(1 for t, p in zip(y_true, y_pred) if t 1 and p 1) fn sum(1 for t, p in zip(y_true, y_pred) if t 1 and p 0) return tp / (tp fn) if (tp fn) 0 else 0 # 对比sklearn实现 from sklearn.metrics import recall_score print(f自定义召回率: {recall(y_true, y_pred):.2f}) print(fsklearn召回率: {recall_score(y_true, y_pred):.2f})在医疗诊断等场景中高召回率至关重要因为它意味着尽可能少地漏诊实际患病者(FN)。2.4 F1分数的计算与意义F1分数是精确率和召回率的调和平均数用于平衡两者def f1_score(y_true, y_pred): p precision(y_true, y_pred) r recall(y_true, y_pred) return 2 * p * r / (p r) if (p r) 0 else 0 # 对比sklearn实现 from sklearn.metrics import f1_score as sklearn_f1 print(f自定义F1分数: {f1_score(y_true, y_pred):.2f}) print(fsklearn F1分数: {sklearn_f1(y_true, y_pred):.2f})F1分数在以下场景特别有用当数据类别不平衡时当假正例(FP)和假负例(FN)的成本都很高时需要单一指标来比较模型时3. 使用sklearn全面评估模型sklearn提供了便捷的classification_report函数可以一次性计算所有指标from sklearn.metrics import classification_report from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # 加载乳腺癌数据集 data load_breast_cancer() X_train, X_test, y_train, y_test train_test_split( data.data, data.target, test_size0.3, random_state42 ) # 训练模型 model LogisticRegression(max_iter10000) model.fit(X_train, y_train) # 预测并生成报告 y_pred model.predict(X_test) print(classification_report(y_test, y_pred))报告输出包含每个类别的精确率、召回率、F1分数和支持数以及宏观平均和加权平均。对于二分类问题通常关注正类的指标。4. 阈值调整对指标的影响分类模型通常输出概率而非直接输出类别。通过调整决策阈值我们可以权衡精确率和召回率import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import precision_recall_curve # 获取预测概率 y_scores model.predict_proba(X_test)[:, 1] # 计算不同阈值下的精确率和召回率 precisions, recalls, thresholds precision_recall_curve(y_test, y_scores) # 绘制P-R曲线 plt.figure(figsize(10, 6)) plt.plot(thresholds, precisions[:-1], b--, labelPrecision) plt.plot(thresholds, recalls[:-1], g-, labelRecall) plt.xlabel(Threshold) plt.legend(loccenter left) plt.ylim([0, 1]) plt.show()通过曲线可以发现提高阈值会增加精确率但降低召回率降低阈值会增加召回率但降低精确率最佳阈值取决于具体业务需求在实际项目中我通常会尝试多个阈值选择使F1分数最大化的那个点除非业务有明确的精确率或召回率要求。例如在信用卡欺诈检测中我们可能更关注召回率宁愿多查一些可疑交易也不愿漏掉真正的欺诈。

相关文章:

别再傻傻分不清了!用Python代码实战带你搞懂准确率、精确率、召回率和F1分数

用Python代码实战解析分类模型四大核心指标 在数据科学项目中,评估分类模型性能是至关重要的一环。很多初学者虽然能背诵准确率、精确率、召回率和F1分数的定义,但当面对实际数据集时,仍然会困惑于这些指标的具体计算方式和应用场景。本文将通…...

【AHC】如何通过 `jmap` + `MAT` 分析 AHC 相关的 Direct Memory 泄漏?

如何通过 jmap + MAT 精准定位 async-http-client 的 Direct Memory 泄漏 发布时间:2026年02月08日 作者:九师兄 AI生成引擎:通义千问(Qwen) 在构建基于 async-http-client 3.0.6 的高吞吐 Flink 实时告警系统时,我们曾遭遇一次诡异的故障:服务运行数小时后,Kubernete…...

别再踩坑了!MybatisPlus更新字段为null的三种正确姿势(附UpdateWrapper实战)

MyBatis-Plus字段更新策略深度解析:三种方式精准控制NULL值写入 引言 在日常开发中,数据更新是最基础也最频繁的操作之一。但许多开发者在使用MyBatis-Plus进行字段更新时,经常会遇到一个看似简单却令人困惑的问题:为什么通过set方…...

CarPlay无线连接背后的‘握手’秘密:深入解读iAP2协议与蓝牙/Wi-Fi协同

CarPlay无线连接背后的‘握手’秘密:深入解读iAP2协议与蓝牙/Wi-Fi协同 当我们将iPhone靠近支持CarPlay的车载系统时,那个看似简单的无线连接背后,实际上隐藏着一场精密的数字芭蕾。这不是简单的蓝牙配对,而是一套由苹果精心设计的…...

3个步骤轻松将VR视频转为普通设备可播放的2D格式:VR-Reversal实用指南

3个步骤轻松将VR视频转为普通设备可播放的2D格式:VR-Reversal实用指南 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gi…...

RabbitMQ系列文章(第二篇):RabbitMQ环境搭建——Windows/Linux/docker全教程(避坑指南)

大家好,欢迎来到RabbitMQ系列的第二篇文章!上一篇我们搞懂了消息队列的核心价值、主流MQ的对比,以及RabbitMQ的优势,今天我们正式进入实操环节——环境搭建。 环境搭建是所有实操的基础,也是新手最容易踩坑的环节&…...

避坑指南:Qt中实现双滑块的4种方法全解析(自绘、继承、样式表与事件过滤)

Qt双滑块控件实现方案深度评测与技术选型指南 在音视频编辑、数据可视化等专业软件领域,双滑块控件已成为时间轴选取、色彩范围调节等功能的标配交互元素。作为Qt开发者,面对"如何高效实现双滑块"这个看似简单的需求时,往往会陷入技…...

专业术语统计报告_面向复杂多场景下综合能源系统供需平衡的综合需求响应策略研究

专业术语统计报告_面向复杂多场景下综合能源系统供需平衡的综合需求响应策略研究 一、概要简析 【概要分析】 本文档《面向复杂多场景下综合能源系统供需平衡的综合需求响应策略研究》超用心地围绕研究主题展开了系统性探讨哦😜!文档总字符数足足有16543…...

别再乱用$了!Godot GDScript中$符号的5个高效用法与3个常见报错解决

别再乱用$了!Godot GDScript中$符号的5个高效用法与3个常见报错解决 在Godot引擎的日常开发中,GDScript的$符号就像一把双刃剑——用得好能大幅提升开发效率,用得不好则会让代码充满隐患。许多从Unity转战Godot的开发者,往往带着&…...

文档站点生成器 - Sphinx

简介 Sphinx 是一个高度可扩展、功能丰富的文档生成工具,最初为 Python 官方文档开发,现已成为技术文档领域的事实标准。它支持从 reStructuredText 或 Markdown 源文件生成多种输出格式(HTML、PDF、ePub、LaTeX 等)。 核心特点 …...

多模态视频理解与GRPO强化学习技术解析

1. 多模态视频理解的技术背景与挑战视频理解作为计算机视觉领域的重要研究方向,已经从早期的单一模态分析发展到如今的跨模态融合阶段。传统视频分析方法主要依赖视觉特征提取,如使用3D卷积神经网络处理时序信息,或通过双流网络分别建模空间和…...

商城产品详情页的客服咨询在哪里设置详解:从入门到实战全攻略

关于这个问题,很多商家都不太清楚。今天来详细解答。一、问题背景在实际运营小程序商城的过程中,不少商家会遇到:商城产品详情页的客服咨询在哪里设置二、详细解答通过产品详情页内设置客服功能,具体请参考以下教程:1.…...

python-103-操作的技巧和注意事项(一)shell粘贴命令行参数及subprocess执行系统命令及字典传参

文章目录 1 shell粘贴命令行参数 1.1 问题描述 1.2 支持的字符串长度 1.3 复制粘贴参数 1.4 解决方案 2 subprocess 2.1 参数含义 2.2 安全提示 2.3 安全路径 3 字典作为函数参数 3.1 原始字典会变化 3.2 若不想改变原始字典 4 字典传参 4.1 函数调用时(使用**解包字典) 4.2 函…...

3分钟快速掌握微信聊天记录解密:WechatDecrypt工具终极指南

3分钟快速掌握微信聊天记录解密:WechatDecrypt工具终极指南 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经因为误删了重要的微信聊天记录而感到焦虑?或者需要找回某次关…...

鸣潮游戏自动化终极指南:基于图像识别的智能辅助解决方案

鸣潮游戏自动化终极指南:基于图像识别的智能辅助解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否厌倦了…...

【HALCON 实战入门】15. Blob分析

欢迎订阅【HALCON 实战入门】专栏: 1. HALCON 简介与安装 5. 相机接入与图像采集 10. 阈值分割与目标提取 11. 区域处理与分析 12. 边缘检测与轮廓提取 13. 轮廓分析与几何特征 14. 形态学处理 15. Blob分析 16. 图像匹配 【HALCON 实战入门】15. Blob分析一、什么是…...

Autovisor:2025年智慧树课程自动化学习终极解决方案

Autovisor:2025年智慧树课程自动化学习终极解决方案 【免费下载链接】Autovisor 2025智慧树刷课脚本 基于Python Playwright的自动化程序 [有免安装版] 项目地址: https://gitcode.com/gh_mirrors/au/Autovisor Autovisor是一款基于Python Playwright框架开发…...

图书管理系统核心功能覆盖图书全生命周期管理,包括购入、借阅、归还、注销四大业务流程,同时支持读者信息

本节内容来自《软件设计师教程(第5版)》第12章相关章节,为图书管理系统的结构化分析阶段成果: 12.1.1 需求说明 图书管理系统核心功能覆盖图书全生命周期管理,包括购入、借阅、归还、注销四大业务流程,同时…...

软件设计师考试聚焦软件设计开发的主流技术与工程实践,要求应试者不仅掌握基础理论知识

软件设计师考试聚焦软件设计开发的主流技术与工程实践,要求应试者不仅掌握基础理论知识,更能将设计方法与原则应用到实际系统的分析、设计和开发环节。其核心技术领域可归纳为五大模块: 结构化分析与设计 数据库分析与设计 面向对象分析与设计…...

从问卷设计到论文发表:一份完整的验证性因子分析(CFA)保姆级避坑指南

从问卷设计到论文发表:一份完整的验证性因子分析(CFA)保姆级避坑指南 当你第一次接触验证性因子分析(CFA)时,可能会被各种专业术语和统计指标搞得晕头转向。作为一名经历过无数次CFA分析的研究者&#xff0…...

【仅限首批认证开发者】MCP 2026边缘性能调优密钥包:含3个未公开eBPF观测脚本+12个YAML黄金模板

更多请点击: https://intelliparadigm.com 第一章:MCP 2026边缘部署性能优化概览 MCP 2026(Model Control Protocol v2026)是面向边缘智能设备的新一代轻量化协议栈,其核心设计目标是在资源受限的ARM64/RT-Thread/RIS…...

保姆级教程:Hyper-V虚拟机通过内部网络共享WiFi上网,并配置CentOS/Ubuntu静态IP(附MobaXterm连接)

Hyper-V虚拟机内网共享WiFi上网与Linux静态IP配置全指南 1. 环境准备与基础概念 在Windows平台上使用Hyper-V创建Linux虚拟机时,网络配置往往是新手面临的第一个挑战。不同于有线网络的直连特性,WiFi环境下的虚拟机网络共享需要更精细的配置。我们先明确…...

minimind模型训练

项目包括供完整的 MiniMind-LLM 结构代码&#xff08;Dense MoE&#xff09;&#xff0c;当前主线结构对齐 Qwen3 / Qwen3-MoE 生态。提供 Tokenizer 与分词器训练代码&#xff0c;支持 <tool_call>、<tool_response>、<think> 等模板标记。覆盖 Pretrain、…...

别再只用纯色背景了!用CSS的linear-gradient和radial-gradient给你的网站加点‘料’

用CSS渐变打造高级视觉层次&#xff1a;从基础技法到设计实战 你是否已经厌倦了千篇一律的纯色背景&#xff1f;在当今追求极致用户体验的网页设计领域&#xff0c;一个精心设计的渐变背景往往能成为吸引用户驻留的关键细节。作为前端开发者&#xff0c;我们手中的linear-gradi…...

ISO-Bench:AI生成代码性能评估基准测试实践

1. 项目背景与核心价值在软件开发领域&#xff0c;代码生成与优化一直是提升工程效率的关键环节。最近两年&#xff0c;AI编码助手的爆发式增长让"用自然语言描述需求&#xff0c;自动生成可运行代码"这一愿景逐渐成为现实。但一个长期被忽视的问题是&#xff1a;这些…...

从纸质到数字:用Audiveris让古老乐谱重获新生的魔法

从纸质到数字&#xff1a;用Audiveris让古老乐谱重获新生的魔法 【免费下载链接】audiveris Latest generation of Audiveris OMR engine 项目地址: https://gitcode.com/gh_mirrors/au/audiveris 你是否有一叠泛黄的乐谱&#xff0c;承载着岁月的记忆却难以传承&#x…...

为AI代码生成器Cursor配置ESLint与Prettier规则集,实现自动化代码规范检查与格式化

1. 项目概述&#xff1a;为 Cursor 编辑器注入代码规范的灵魂如果你和我一样&#xff0c;日常重度依赖 Cursor 这款 AI 驱动的编辑器来加速开发&#xff0c;那你一定体会过那种“痛并快乐着”的感觉。快乐在于&#xff0c;它确实能帮你快速生成代码片段、重构函数&#xff0c;甚…...

解锁旧Mac新生命:OpenCore Legacy Patcher完全指南

解锁旧Mac新生命&#xff1a;OpenCore Legacy Patcher完全指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为心爱的旧Mac无法升级最新macOS而烦…...

MARS算法原理与Python实现:非线性回归实战指南

1. MARS算法核心原理拆解多元自适应回归样条(Multivariate Adaptive Regression Splines)是一种非线性回归技术&#xff0c;由Jerome Friedman在1991年提出。它通过分段线性回归的方式自动构建预测模型&#xff0c;特别适合处理高维数据中的复杂非线性关系。1.1 基础数学框架MA…...

在 Ubuntu 上为 Claude Code 配置 Taotoken 作为 Anthropic 兼容后端

在 Ubuntu 上为 Claude Code 配置 Taotoken 作为 Anthropic 兼容后端 1. 准备工作 在开始配置前&#xff0c;请确保已满足以下条件&#xff1a;Ubuntu 系统已安装 Claude Code 编程助手&#xff0c;并拥有有效的 Taotoken API Key。API Key 可在 Taotoken 控制台的「API 密钥…...