科普:如何通过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=0f(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 TPRFPR
最大化 d d d等价于最大化 ∣ TPR − FPR ∣ |\text{TPR} - \text{FPR}| TPRFPR。由于ROC曲线中 TPR ≥ FPR \text{TPR} \geq \text{FPR} TPRFPR(模型至少不劣于随机分类器),故等价于最大化 TPR − FPR \text{TPR} - \text{FPR} TPRFPR,即约登指数 J J J
因此,切线平行于对角线的点,正是ROC曲线离对角线最远的点,几何上表现为曲线的“拐点”(曲率较大的切点)。

注:

  • 数学拐点:严格定义为二阶导数变号的点(曲线凹凸性改变的点),与切线斜率无关。
  • 此处“拐点”:实际指约登指数最大的切点,强调几何上离对角线最远、切线斜率为1,而非严格数学拐点。
  • 曲率最大点:通过曲率公式 κ = ∣ f ′ ′ ∣ ( 1 + f ′ 2 ) 3 / 2 \kappa = \frac{|f''|}{(1 + f'^2)^{3/2}} κ=(1+f′2)3/2f′′计算,可能与切线斜率为1的点重合(当二阶导数在此处达到极值时),但二者定义不同。
    • 实际应用中,约登指数最大的点更关注业务意义(平衡TPR和FPR),而非纯数学曲率。

实例验证
假设某模型的ROC曲线方程为 TPR = FPR \text{TPR} = \sqrt{\text{FPR}} TPR=FPR (凸曲线),求切线斜率为1的点:

  1. 导数 f ′ ( FPR ) = 1 2 FPR = 1 f'(\text{FPR}) = \frac{1}{2\sqrt{\text{FPR}}} = 1 f(FPR)=2FPR 1=1,解得 FPR = 0.25 \text{FPR} = 0.25 FPR=0.25,对应 TPR = 0.5 \text{TPR} = 0.5 TPR=0.5
  2. 该点切线方程为 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.50.25=0.25为最大值。
  3. 几何上,该点到对角线的距离为 0.25 2 \frac{0.25}{\sqrt{2}} 2 0.25,是曲线上的最大距离点。

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

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

相关文章

2025ArkTS基础UI(一)——Column、Row、Text、Button组件

2025ArkTS基础UI(一)——Column、Row、Text、Button组件 前言 臭宝们,今天我们来学习ArkTS基础UI组件的使用,其中包括: Column、Row、Text、Button组件。 知识点 Colum、Row组件用于布局,Text、Image、Button组件用于展示。 …

强化学习:基于价值的方法做的是回归,基于策略的方法做的是分类,可以这么理解吗?

在强化学习领域,基于价值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是两种核心范式。本文将从目标函数、优化机制以及与机器学习任务的类比角度,探讨这两种方法是否可以被分别理解为回归和分类任务,并深入分析其内在逻辑。 一、基于价值的方法…

折叠屏手机:技术进步了,柔性OLED面板测试技术需求跟上了吗?

全球智能手机市场陷入创新焦虑,折叠屏手机被寄予厚望,2023 年出货量同比增长 62%。但在供应链技术狂欢背后,存在诸多问题。消费端数据显示,用户使用频率低,定价策略反常。产业链重构虽让部分企业获利,却推高…

前端在线工具 CodePen 和 JSFiddle

前端在线工具 CodePen 和 JSFiddle CodePen 概述:CodePen 是一个社交化的前端开发环境,用户可以在这里创建代码片段(称为“Pens”),分享和展示自己的前端开发作品。 主要功能: 实时预览:用户在…

Redis-场景缓存+秒杀+管道+消息队列

缓存一致性 1.两次更新 先更新数据库,再更新缓存;先更新缓存,再更新数据库; 出现不一致问题场景: 先更新数据库,再更新缓存; 先更新缓存,再更新数据库; 两次更新的适…

[Windows] 字体渲染 mactype v2025.4.11

[Windows] 字体渲染 mactype 链接:https://pan.xunlei.com/s/VONeCUP2hEgO5WIQImgtGUmrA1?pwdyruf# 025.4.11 Variable font support 可变字体支持已到来。 本版本将可变字体支持扩展到所有 GDI 应用程序。 所有 win32 程序中的字体,如 Noto Sans、Se…

【C++】深拷贝与浅拷贝

重开也不是不可能 ~.~ 浅拷贝 #include <iostream> #include <cstring>class ShallowCopyExample { public:int m_nValue;int* m_pData;// 构造函数&#xff0c;初始化指针成员ShallowCopyExample(int value) : m_nValue(value) {m_pData new int(0);*m_pData va…

SpringBoot企业级开发之【用户模块-更新用户头像】

功能如下所示&#xff1a; 我们先看一下接口文档&#xff1a; 为什么头像是一串字符串呢&#xff1f;因为我们是将头像图片放到第三方去存储&#xff0c;比如&#xff1a;阿里云等 开发思路&#xff1a; 实操&#xff1a; 1.controller 注意!这里使用【PatchMapping】注解…

vue3+vite+js项目引入electron构建跨平台桌面应用

1.准备工作 ① 必要安装node.js、vue、vite、electron、pnpm 本人用的node版本v18.17.1、vue版本^3.4.19、vite版本^3.2.7、electron版本^35.1.4 ② 开发调试打包安装 "devDependencies": {"concurrently": "^9.1.2","electron-builder&…

(51单片机)串口通讯(串口通讯教程)(串口接收发送教程)

前言&#xff1a; 今天有两个项目&#xff0c;分别为&#xff1a; 串口接收: 串口发送&#xff1a; 如上图将文件放在Keli5 中即可&#xff0c;然后烧录在单片机中就行了 烧录软件用的是STC-ISP&#xff0c;不知道怎么安装的可以去看江科大的视频&#xff1a; 【51单片机入门…

《汽车制造技术基础》第一次作业

作业内容 查阅相关资料&#xff0c;谈谈对汽车制造技术的发展的理解。 可以是关于汽车的先进制造技术 或 汽车先进制造技术 与 制造理念的发展趋势 或 汽车先进制造技术对环境与可持续发展的影响等。 以下从技术突破、制造理念转型及环境影响三个维度展开对汽车制造技…

Scala day4(tuple, set and map)

Foreword Hi!! my dear friends, are you lazy at today?? Oh! I am also lazy sometimes, but you will know keep study that’s a right way at last. Now!! let’s start new travel about Scala. Text The all Codes in file day3.scala, like the below program: i…

docker compose搭建博客wordpress

一、前言 docker安装等入门知识见我之前的这篇文章 https://blog.csdn.net/m0_73118788/article/details/146986119?fromshareblogdetail&sharetypeblogdetail&sharerId146986119&sharereferPC&sharesourcem0_73118788&sharefromfrom_link 1.1 docker co…

第二期:[特殊字符] 深入理解MyBatis[特殊字符]MyBatis基础CRUD操作详解[特殊字符]

前言 &#x1f31f; 在掌握了 MyBatis 的基本配置与环境搭建之后&#xff0c;接下来的重点便是深入理解其核心功能——CRUD 操作&#xff08;增删改查&#xff09;。&#x1f4bb; 数据库操作是任何应用开发中不可或缺的一环&#xff0c;而 MyBatis 正是通过灵活的 SQL 映射机…

Java面试黄金宝典46

1. Python 如何写爬虫 定义:Python 爬虫是借助 Python 语言编写程序,模拟浏览器行为向目标网站发送 HTTP 请求,获取网页内容,再通过解析工具提取所需数据的程序。其本质是自动化的数据采集过程。要点: 发送请求:利用requests库发送 HTTP 请求,如 GET、POST 等,获取网页…

建设“大数据智慧招商平台”,助力园区突破招商瓶颈!

在数字经济高速发展的今天&#xff0c;传统招商模式正面临信息不对称、效率低下、匹配不精准等瓶颈。产业园区作为区域经济发展的核心载体&#xff0c;亟需借助智能化手段提升招商效能。构建大数据智慧招商平台&#xff0c;利用大数据、人工智能等技术获取精准招商线索、促进产…

Vue事件修饰符课堂练习

Vue事件修饰符课堂练习 题目‌&#xff1a;基于 Vue 2.0&#xff0c;使用事件修饰符 .stop、.prevent、.capture、.self 和 .once&#xff0c;为按钮绑定 click 事件&#xff0c;并展示每个修饰符的作用。 要求‌&#xff1a; 创建一个 Vue 实例&#xff0c;并绑定到一个 HT…

【C#】线程回调

在 C# 中&#xff0c;线程回调是一种常见的编程模式&#xff0c;用于在线程完成任务后执行某些操作。通过使用 Thread 类或其他更高层次的并发工具&#xff08;如 Task&#xff09;&#xff0c;可以实现线程回调的功能。 回调机制 特点 直接性&#xff1a;回调通常是通过委托…

【C++游戏引擎开发】第14篇:视图空间与相机坐标系

一、视图空间的基础数学框架 1.1 齐次坐标与变换矩阵 三维坐标系变换采用44齐次坐标矩阵,其通用形式为: M = [ A 3 3 b 3 1 0 1 3 1 ] \mathbf{M} = \begin{bmatrix} \mathbf{A}_{33} & \mathbf{b}_{31} \\ \mathbf{0}_{13} & 1 \end{bmatrix} M=[A33​013​​…

【大模型理论篇】关于生成式模型中联合分布概率学习必要性以及GPT是生成式模型的讨论

1. 背景 之前我们在《生成式模型与判别式模型对比(涉及VAE、CRF的数学原理详述)》以及《生成式模型算法原理深入浅出&#xff08;涉及Stable Diffusion、生成对抗网络、高斯混合模型、隐马尔可夫模型、朴素贝叶斯等算法原理分析及生成式模型解释&#xff09;》中&#xff0c;我…