科普:如何通过ROC曲线,确定二分类的“理论阈值”
在二分类问题中,已知预测概率(如逻辑回归、神经网络输出的概率值)时,阈值的选择直接影响分类结果(正/负样本判定)。
一、实践中的阈值选择方法
1. 基于业务目标的调整
- 最大化准确率:适用于样本均衡且无特殊代价偏好,通常选阈值0.5(默认设置),但需验证是否最优。
- 最大化召回率(灵敏度):如欺诈检测、疾病筛查,需降低阈值(如0.3),允许更多误报以减少漏报。
- 最大化精确率:如推荐系统,需提高阈值(如0.7),确保高置信度预测。
2. F1分数最大化
F1分数是精确率和召回率的调和平均,公式为:
F 1 = 2 ⋅ 精确率 ⋅ 召回率 精确率 + 召回率 F1 = 2 \cdot \frac{\text{精确率} \cdot \text{召回率}}{\text{精确率} + \text{召回率}} F1=2⋅精确率+召回率精确率⋅召回率
遍历阈值,找到使F1最大的点,尤其适用于样本不平衡场景。
3. 可视化工具辅助
- Precision-Recall曲线:观察不同阈值下精确率和召回率的权衡,选择符合业务目标的交点。
二、理论上的最优阈值点
但有时,到甲方做POC时,作为外部的技术人员并不懂它的业务,这时需要先从理论上给出阈值。
1. 贝叶斯决策理论:最小错误率阈值
当误分类代价相等时,根据贝叶斯决策理论,最优阈值应使整体分类错误率最小,对应公式为:
阈值 = P ( 负类 ) P ( 正类 ) = 负类先验概率 正类先验概率 \text{阈值} = \frac{P(\text{负类})}{P(\text{正类})} = \frac{\text{负类先验概率}}{\text{正类先验概率}} 阈值=P(正类)P(负类)=正类先验概率负类先验概率
- 原理:若预测概率 p ≥ 阈值 p \geq \text{阈值} p≥阈值,判为正类;否则判为负类。
- 适用场景:样本均衡(正负类先验概率接近)且误分类成本相同。
2. 约登指数(Youden’s Index)最大化
约登指数定义为 灵敏度(真阳率) + 特异度(真阴率) - 1,其最大值对应的阈值是理论上平衡灵敏度和特异度的最优解:
阈值 = arg max τ ( TPR ( τ ) + TNR ( τ ) − 1 ) \text{阈值} = \arg\max_{\tau} \left( \text{TPR}(\tau) + \text{TNR}(\tau) - 1 \right) 阈值=argτmax(TPR(τ)+TNR(τ)−1)
- 优势:无需考虑误分类成本,仅基于数据本身的分布,是ROC曲线中离左上角(完美分类点)最近的点。
- 计算:遍历所有可能的阈值(通常取预测概率的唯一值),计算对应的约登指数并取最大值。
3. 最小化预期误分类成本(Cost-Sensitive)
当正负样本误分类代价不同(如漏诊代价高于误诊),阈值需根据代价矩阵调整:
阈值 = C ( 正类→负类 ) ⋅ P ( 负类 ) C ( 负类→正类 ) ⋅ P ( 正类 ) \text{阈值} = \frac{C(\text{正类→负类}) \cdot P(\text{负类})}{C(\text{负类→正类}) \cdot P(\text{正类})} 阈值=C(负类→正类)⋅P(正类)C(正类→负类)⋅P(负类)
- C ( 正→负 ) C(\text{正→负}) C(正→负):正类误判为负类的代价(如漏判疾病);
- C ( 负→正 ) C(\text{负→正}) C(负→正):负类误判为正类的代价(如误报疾病)。
- 示例:若漏判代价是误报的10倍,阈值应降低以减少漏判。
3. 可视化工具辅助
- ROC曲线:虽然AUC不直接给出阈值,但ROC曲线上的“拐点”(曲率最大点)常被经验性选为阈值。
三、一个数学推导与几何意义
理论上的“最优点”本质是目标函数的最优解,需根据问题特性(成本、均衡性、业务需求)选择合适的标准,而非单一固定值。
ROC曲线上的“拐点”(曲率最大点)可作为理论上的阈值,有很强的几何意义:它既是约登指数最大的点,又是平行于对角线(过(0,0)和(1,1)的直线与ROC的切点,即:ROC曲线上切线与对角线(斜率1)平行的点,是约登指数最大的点,也是几何上离对角线最远的“拐点”(切点)。
如下从数学角度证明:
1. 对角线的斜率与切线条件
对角线方程为 TPR = FPR \text{TPR} = \text{FPR} TPR=FPR,斜率为1。
设ROC曲线为 TPR = f ( FPR ) \text{TPR} = f(\text{FPR}) TPR=f(FPR),曲线上某点的切线斜率为 f ′ ( FPR ) f'(\text{FPR}) f′(FPR)。
当切线与对角线平行时,有:
f ′ ( FPR ) = 1 f'(\text{FPR}) = 1 f′(FPR)=1
2. 约登指数最大化与切线条件
约登指数 J = f ( FPR ) − FPR J = f(\text{FPR}) - \text{FPR} J=f(FPR)−FPR,对 FPR \text{FPR} FPR求导并令导数为0:
d J d FPR = f ′ ( FPR ) − 1 = 0 ⇒ f ′ ( FPR ) = 1 \frac{dJ}{d\text{FPR}} = f'(\text{FPR}) - 1 = 0 \quad \Rightarrow \quad f'(\text{FPR}) = 1 dFPRdJ=f′(FPR)−1=0⇒f′(FPR)=1
这表明约登指数最大的点恰好满足切线斜率为1,即切线与对角线平行。
3. 几何意义:离对角线最远的点
对角线代表“随机分类器”(无区分能力),ROC曲线上任意点 ( FPR , TPR ) (\text{FPR}, \text{TPR}) (FPR,TPR)到对角线的垂直距离为:
d = ∣ TPR − FPR ∣ 2 d = \frac{|\text{TPR} - \text{FPR}|}{\sqrt{2}} d=2∣TPR−FPR∣
最大化 d d d等价于最大化 ∣ TPR − FPR ∣ |\text{TPR} - \text{FPR}| ∣TPR−FPR∣。由于ROC曲线中 TPR ≥ FPR \text{TPR} \geq \text{FPR} TPR≥FPR(模型至少不劣于随机分类器),故等价于最大化 TPR − FPR \text{TPR} - \text{FPR} TPR−FPR,即约登指数 J J J。
因此,切线平行于对角线的点,正是ROC曲线离对角线最远的点,几何上表现为曲线的“拐点”(曲率较大的切点)。
注:
- 数学拐点:严格定义为二阶导数变号的点(曲线凹凸性改变的点),与切线斜率无关。
- 此处“拐点”:实际指约登指数最大的切点,强调几何上离对角线最远、切线斜率为1,而非严格数学拐点。
- 曲率最大点:通过曲率公式 κ = ∣ f ′ ′ ∣ ( 1 + f ′ 2 ) 3 / 2 \kappa = \frac{|f''|}{(1 + f'^2)^{3/2}} κ=(1+f′2)3/2∣f′′∣计算,可能与切线斜率为1的点重合(当二阶导数在此处达到极值时),但二者定义不同。
- 实际应用中,约登指数最大的点更关注业务意义(平衡TPR和FPR),而非纯数学曲率。
实例验证
假设某模型的ROC曲线方程为 TPR = FPR \text{TPR} = \sqrt{\text{FPR}} TPR=FPR(凸曲线),求切线斜率为1的点:
- 导数 f ′ ( FPR ) = 1 2 FPR = 1 f'(\text{FPR}) = \frac{1}{2\sqrt{\text{FPR}}} = 1 f′(FPR)=2FPR1=1,解得 FPR = 0.25 \text{FPR} = 0.25 FPR=0.25,对应 TPR = 0.5 \text{TPR} = 0.5 TPR=0.5。
- 该点切线方程为 TPR = FPR + 0.25 \text{TPR} = \text{FPR} + 0.25 TPR=FPR+0.25,确实平行于对角线,且约登指数 J = 0.5 − 0.25 = 0.25 J = 0.5 - 0.25 = 0.25 J=0.5−0.25=0.25为最大值。
- 几何上,该点到对角线的距离为 0.25 2 \frac{0.25}{\sqrt{2}} 20.25,是曲线上的最大距离点。
相关文章:
科普:如何通过ROC曲线,确定二分类的“理论阈值”
在二分类问题中,已知预测概率(如逻辑回归、神经网络输出的概率值)时,阈值的选择直接影响分类结果(正/负样本判定)。 一、实践中的阈值选择方法 1. 基于业务目标的调整 最大化准确率:适用于样…...
ebpf: CO-RE, BTF, and Libbpf(二)
本文内容主要来源于Learning eBPF,可阅读原文了解更全面的内容。 本文涉及源码也来自于书中对应的github:https://github.com/lizrice/learning-ebpf/ 概述 上篇文章主要讲了CO-RE最关键的一环:BTF,了解其如何记录内核中的数据结…...
祁连山国家公园shp格式数据
地理位置 祁连山国家公园位于中国西北部,横跨甘肃省与青海省交界处,主体处于青藏高原东北边缘。总面积约5.02万平方公里,是中国首批设立的10个国家公园之一。 设立背景 保护措施 文化与历史 旅游与教育 意义与挑战 祁连山国家公园的设立标志…...
《AI大模型应知应会100篇》 第16篇:AI安全与对齐:大模型的灵魂工程
第16篇:AI安全与对齐:大模型的灵魂工程 摘要 在人工智能技术飞速发展的今天,大型语言模型(LLM)已经成为推动社会进步的重要工具。然而,随着这些模型能力的增强,如何确保它们的行为符合人类的期…...
探索QEMU-KVM虚拟化:麒麟系统下传统与云镜像创建虚拟机的最佳实践
随着云计算和虚拟化技术的不断进步,虚拟化在管理服务器、隔离资源以及提升性能方面的好处越来越明显。麒麟操作系统Kylin OS是我们国家自己开发的操作系统,在政府机构和企业中用得很多。这篇文章会教你如何在麒麟操作系统上设置QEMU-KVM虚拟化环境&#…...
[ComfyUI] 最新控制模型EasyControl,吉卜力风格一键转绘
一、EasyControl介绍 玩ComfyUI的都知道Controlnet的重要性,可以根据约束来引导图片的生成,这也是ComfyUI商业化里面很重要的一环。 不过之前我们用的Controlnet都是基于Unet技术框架下的。 最近出的这个EasyControl有点不一样,是基于DiT&a…...
项目执行中的目标管理:从战略到落地的闭环实践
——如何让目标不“跑偏”、团队不“掉队”? 引言:为什么目标管理决定项目成败? 根据PMI研究,47%的项目失败源于目标模糊或频繁变更。在复杂多变的项目环境中,目标管理不仅是制定KPI,更是构建“方向感-执行…...
《计算机视觉度量:从特征描述到深度学习》—深度学习工业检测方案评估
谢谢各位粉丝的支持,过去了一年多才再次更新技术博客。原因是个人家庭和技术发展在这短短一年多,发生了很大变化。本人身为技术博主,也在不断的探索和研究新技术在工业检测领域的技术方案。 并在这期间已经完成了基础的工业检测大模型的设计…...
网页防篡改与盗链防护:实时监控与自动化修复实践
摘要:针对网页内容篡改与盗链问题,本文基于群联AI云防护系统,详解如何通过哈希校验、实时监控与CDN联动实现秒级修复,并提供Python与AWS S3集成代码。 一、网页安全的核心需求 防篡改:保障页面内容完整性,…...
LR(0)
LR0就是当我处在自动机为红色这些结束状态的时候,这些红色状态就代表我们识别到了一个句柄,那现在的问题就是识别到了句柄,那要不要对他进行归约?LR0就是我不管当前指针指向的终结符是什么,我都拿它做规约 这里的二号状…...
鸿蒙开发-页面跳转
1.路由使用 //1.引入路由 import router from ohos.router//2.使用跳转router.pushUrl({url: "pages/Show"})2.页面跳转 import { router } from kit.ArkUI;Entry Component struct LoginPage {State message: string 登陆页;build() {Row() {Column() {Text(this…...
#MES系统中的一些相关的名词
📌MES系统 部分 术语表 缩写英文全称中文名称详细解释MESManufacturing Execution System制造执行系统用于连接计划系统与生产现场,实时管理和控制整个生产过程,覆盖物料、人员、设备、质量、指令等。ERPEnterprise Resource Planning企业资…...
无人船 | 图解基于视线引导(LOS)的无人艇制导算法
目录 1 视线引导法介绍2 LOS制导原理推导3 Lyapunov稳定性分析4 LOS制导效果 1 视线引导法介绍 视线引导法(Line of Sight, LOS)作为无人水面艇(USV)自主导航领域的核心技术,通过几何制导与动态控制深度融合的机制&am…...
LeetCode LCR157 套餐内商品的排列顺序
生成字符串的全部排列(去重):从问题到解决方案的完整解析 问题背景 在编程和算法设计中,生成字符串的所有排列是一个经典问题。它不仅出现在算法竞赛中,也在实际开发中有着广泛的应用,比如生成所有可能的…...
3.2.2.3 Spring Boot配置拦截器
在Spring Boot应用中配置拦截器(Interceptor)可以对请求进行预处理和后处理,实现如权限检查、日志记录等功能。通过实现HandlerInterceptor接口并注册到Spring容器,拦截器可以自动应用到匹配的请求路径。案例中,创建了…...
cryptozombies合约6
我们就快完成我们的随机僵尸制造器了,来写一个公共的函数把所有的部件连接起来。 写一个公共函数,它有一个参数,用来接收僵尸的名字,之后用它生成僵尸的DNA。 实战演习 创建一个 public 函数,命名为 createRandomZom…...
大模型文生图
提示词分4个部分:质量,主体,元素,风格 质量:杰作,高质量,超细节,完美的精度,高分辨率,大师级的; 权重:把图片加括号,&am…...
.NET MCP 示例
服务器端示例 基础服务器 以下是一个基础的 MCP 服务器示例,它使用标准输入输出(stdio)作为传输方式,并实现了一个简单的回显工具: using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.H…...
daz dForce to UE 的原理分析
dForce是物理模拟,不是关键帧动画: dForce是一个物理引擎。当你运行模拟时,Daz Studio会根据你设置的物理属性(如裙子的重量、布料的硬度、摩擦力)、环境因素(如重力、风力)以及与角色的碰撞&am…...
LeetCode 118题解 | 杨辉三角
题目链接: https://leetcode.cn/problems/pascals-triangle/description/ 题目如下: 解题过程如下: 杨辉三角就是一个不规则的二维数组,实际上是一个直角三角形。如图所示: 杨辉三角特点:每一行的第一个和最后一个都是…...
『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解
『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解 Pod 结构 每个 Pod 中都可以包含一个或者多个容器,这些容器可以分为两类 用户程序所在的容器,数量可多可少Pause 容器,这是每个 Pod 都会有的一个根容器,它的作用有两个 可…...
裂缝检测数据集,支持yolo,coco json,pasical voc xml,darknet格式的标注,1673张原始训练集图片,正确识别率99.4%
数据集详情: 裂缝检测数据集,支持yolo,coco json,pasical voc xml,darknet格式的标注,1673张原始训练集图片,正确识别率99.4% 2394总图像 数据集分割 训练集占比 70% 1673图片 有效集20% 477图片 测试集...
数据库索引深度解析:原理、类型与高效使用实践
🧠 一句话理解索引是什么? 索引就是数据库中的“目录”或“书签”,它能帮助我们快速找到数据的位置,而不是一页页地翻整本书。 🧩 一、为什么需要索引?(用生活化例子秒懂) 想象你在…...
React 记账本项目实战:多页面路由、Context 全局
在本文中,我们将分享一个使用 React 开发的「记账本」项目的实战经验。该项目通过 VS Code 完成,包含首页、添加记录页、编辑页等多个功能页面,采用了 React Router 实现路由导航,使用 Context API 管理全局的交易记录状态,并引入数据可视化组件呈现不同月份的支出情况。项…...
易路iBuilder智能体平台:人力资源领域AI落地,给“数据权限管控”一个最优解
近日,加拿大电子商务巨头Shopify的CEO Tobias Ltke分享了一份内部备忘录,明确表示有效使用AI已成为公司对每位员工的基本期望,并指出:各团队在招募新员工前,必须先确定是否能够利用AI完成工作。 而在全球范围内&#…...
【3】k8s集群管理系列--包应用管理器helm之chart资源打包并推送到harbor镜像仓库
一、chart资源打包 helm package ./web-chart # 当前目录会生成一个tgz的压缩文件二、安装help push插件(用于推送前面打包的文件,到镜像仓库) .1 下载help-push二进制文件 wget https://github.com/chartmuseum/helm-push/releases/down…...
用 Python 从零构建异步回显服务器
简介 让我们从 0 开始,搭建一个异步服务输出服务器。 套接字 套接字(socket),是不同计算机中实现通信的一种方式,你可以理解成一个接口,它会在客户端和服务端建立连接,一台发送数据ÿ…...
mybatis--多对一处理/一对多处理
多对一处理(association) 多个学生对一个老师 对于学生这边,关联:多个学生,关联一个老师[多对一] 对于老师而言,集合,一个老师有多个学生【一对多】 SQL: 测试环境搭建 1.导入依…...
QT Sqlite数据库-教程002 查询数据-上
【1】DQL语句: DQL语句(数据查询语言),用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。DQL 语句并不会改变数据库,而是让数据库将查询结果发送结果集给客户端,返回的结果是一张虚…...
Kubernetes Operator 是什么,以及它们的用途
最近一个朋友问我关于EKS的升级问题: 场景: 如果我有 100 个 EKS 集群需要升级,那么所有集群都安装了安全插件。由于我不想在升级后手动在每个EKS中重复安装此插件,如何实现EKS升级后自动安装这个安全插件? 答案有多…...
