科普:如何通過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} TPRFPR(模型至少不劣于隨機分類器),故等價于最大化 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/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.5?0.25=0.25為最大值。
  3. 幾何上,該點到對角線的距離為 0.25 2 \frac{0.25}{\sqrt{2}} 2 ?0.25?,是曲線上的最大距離點。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76720.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76720.shtml
英文地址,請注明出處:http://en.pswp.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;我…