機器學習——ROC曲線、PR曲線

一、ROC曲線簡介

1.1? ROC曲線的構成

1.橫軸(假正率,FPR)

FPR=FP/(FP+TN)

表示負樣本被錯誤分類為正的比例(越小越好)

2.縱軸(真正率,TPR,即召回率)

TPR=TP/(TP+FN)

表示正樣本被正確識別的比例(越大越好)

3.曲線繪制:通過調整分類閾值(如邏輯回歸的概率閾值),計算不同閾值下的(FPR, TPR)點,連接這些點形成曲線

1.2??關鍵指標:AUC

1.AUC:ROC曲線下的面積,范圍在0.5(隨機猜測)到1(完美模型)之間

  • AUC = 0.9:模型有90%的概率將隨機正樣本排在負樣本之前
  • AUC對類別分布不敏感,適合不平衡數據評估

1.3??ROC曲線的核心作用

1.模型性能比較:AUC越高,模型整體區分能力越強

2.閾值選擇:通過曲線形狀選擇最佳分類閾值(如平衡誤診與漏診的醫療場景)

3.可視化權衡:曲線越靠近左上角,模型在TPR和FPR間的權衡越好

1.4??ROC vs. 精確率-召回率曲線(PR Curve)

1.ROC:關注整體排序能力,適合類別相對均衡的場景

2.PR Curve:聚焦正類的識別質量(精確率 vs. 召回率),更適合極端類別不平衡(如欺詐檢測)

1.5??實例應用

1.醫學診斷:調整閾值以降低漏診(提高TPR)或減少誤診(降低FPR)

2.信用評分:通過AUC評估模型區分高風險/低風險客戶的能力

二、PR曲線簡介

2.1?PR曲線的構成

1.橫軸(召回率,即TPR)

Recall=TP/(TP+FN)

表示正樣本被正確識別的比例(關注“漏檢”問題)

2.縱軸(精確率)

Precision= TP/(TP+FP)

表示預測為正的樣本中實際為正的比例(關注“誤檢”問題)

3.曲線繪制:通過調整分類閾值(如概率閾值),計算不同閾值下的(Recall, Precision)點,連接這些點形成曲線

2.2?關鍵指標:AUC-PR

1.AUC-PR:PR曲線下的面積,范圍在0(最差)到1(完美模型)之間

  • 類別越不平衡,AUC-PR的評估越敏感。例如,在欺詐檢測中,正樣本占比僅1%時,AUC-PR比AUC-ROC更有參考價值

2.3 PR曲線的核心作用

1.聚焦正類性能:直接反映模型對正類的識別能力,避免負類數量主導評估結果

2.高不平衡場景:當正樣本極少時(如罕見病診斷、欺詐檢測),PR曲線比ROC曲線更可靠

3.閾值選擇:通過曲線形狀選擇平衡精確率和召回率的最佳閾值(例如,醫療場景需高召回率,推薦系統需高精確率)

2.4?PR曲線 vs?ROC曲線

對比維度PR曲線ROC曲線
核心關注點正類的識別質量(Precision vs. Recall)整體排序能力(TPR vs. FPR)
使用場景正樣本極少(極端不平衡)類別相對均衡或關注整體性能
對類別不平衡敏感度高度敏感不敏感(因FPR受負類數量影響較小)
AUC解釋AUC-PR越低,模型漏檢或誤檢越嚴重AUC-ROC反映整體排序能力

2.5 實例應用

1.罕見病篩查:需高召回率(減少漏診),允許一定誤診(低精確率)

2.垃圾郵件檢測:需高精確率(避免正常郵件被誤判為垃圾),可容忍少量漏檢(低召回率)

3.推薦系統:平衡精確率(推薦內容相關性)和召回率(覆蓋用戶興趣范圍)

2.6?注意事項

1.負樣本主導時慎用:若負樣本占比過高(如99%),PR曲線可能波動較大,需結合其他指標(如F1分數)

2.隨機基線的差異:ROC曲線的隨機基線是AUC=0.5,而PR曲線的隨機基線為:

隨機模型AUC-PR = 正樣本比例 / (正樣本比例 + 負樣本比例)

例如正樣本占1%,隨機模型的AUC-PR ≈ 0.01

三、代碼實現

1.導入所需要的包

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score

2.加載數據集,進行訓練

 隨機生成數據集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 使用隨機森林分類器進行訓練
clf = RandomForestClassifier(random_state=42)
clf.fit(X_train, y_train)# 獲取預測結果
y_pred_proba = clf.predict_proba(X_test)[:, 1] 

3.計算ROC曲線和PR曲線

# 計算ROC曲線
fpr, tpr, _ = roc_curve(y_test, y_pred_proba)
roc_auc = auc(fpr, tpr)# 計算PR曲線
precision, recall, _ = precision_recall_curve(y_test, y_pred_proba)
average_precision = average_precision_score(y_test, y_pred_proba)

4.繪制ROC曲線和PR曲線

# 繪制ROC曲線
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")# 繪制PR曲線
plt.subplot(1, 2, 2)
plt.plot(recall, precision, color='blue', lw=2, label=f'PR curve (AP = {average_precision:.2f})')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall (PR) Curve')
plt.legend(loc="best")# 顯示圖像
plt.tight_layout()
plt.show()

四、曲線可視化展示

4.1 曲線截圖

4.2 圖像分析

1.ROC曲線分析

  • ?ROC曲線:展示了分類模型在不同閾值下的真陽性率(TPR)與假陽性率(FPR)之間的關系。
  • ?曲線下的面積(AUC):圖中顯示AUC為0.92,表示模型具有很高的區分能力。AUC值越接近1,模型性能越好。
  • ?對角線:圖中的虛線表示隨機猜測的模型性能,曲線越遠離這條線,模型性能越好。 ?

2.PR曲線分析

  • PR曲線:展示了分類模型在不同閾值下的精確率(Precision)與召回率(Recall)之間的關系。
  • 平均精確率(AP):圖中顯示AP為0.94,表示模型在不同召回率下的精確率平均值很高,說明模型在處理不平衡數據集時表現良好。 ?
  • 曲線形狀:曲線越靠近左上角,模型性能越好。圖中曲線在大部分區域都保持較高的精確率,說明模型在不同召回率下都能保持較高的精確度。

3.總結

  • 這兩個圖表明該模型在分類任務中表現優異,具有很高的區分能力和精確度。
  • ROC曲線適合評估模型的整體性能,而PR曲線更適合評估模型在不平衡數據集上的表現

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

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IntelliJ IDEA下開發FPGA——FPGA開發體驗提升__上

前言 由于Quartus寫代碼比較費勁,雖然新版已經有了代碼補全,但體驗上還有所欠缺。于是使用VS Code開發,效果如下所示,代碼樣式和基本的代碼補全已經可以滿足開發,其余工作則交由Quartus完成 但VS Code的自帶的git功能&…

昂貴的DOM操作:一次DOM導致的性能問題排查記錄

公司來了一個前端實習生,踏實,勤快,很快得到老大的認可,分配給她一個需求,大概如下:構建一個公司產品的評論展示頁面,頁面可以滾動加載新的內容,同時如果已經加載的內容發生變化&…

前端服務配置詳解:從入門到實戰

前端服務配置詳解:從入門到實戰 一、環境配置文件(.env) 1.1 基礎結構 在項目根目錄創建 .env 文件: # 開發環境 VUE_APP_API_BASE_URL http://localhost:3000/api VUE_APP_VERSION 1.0.0# 生產環境(.env.produc…

【學習筆記】計算機網絡(七)—— 網絡安全

第7章 網絡安全 文章目錄 第7章 網絡安全7.1 網絡安全問題概述7.1.1 計算機網絡面臨的安全性威脅7.1.2 安全的計算機網絡7.1.3 數據加密模型 7.2 兩類密碼體制7.2.1 對稱密鑰密碼體制7.2.2 公鑰密碼體制 7.3 鑒別7.3.1 報文鑒別7.3.2 實體鑒別 7.4 密鑰分配7.4.1 對稱密鑰的分配…

我用Cursor + DeepSeek + Claude-3.7-Sonnet + DevBox,10分鐘開發了一個系統

大家好,我是袁庭新。Cursor最近可謂是火的一塌糊涂,于是我深度體驗了一波。我用的環境是Cursor Claude-3.7-Sonnet DevBox,整個過程我一行代碼都沒有寫,10分鐘幫我開發了一個系統,且前后端聯調一把通過。驚出一身冷汗…

SpringBoot企業級開發之【用戶模塊-登錄】

開發之前我們先看一下接口文檔的要求: 開發思路: 開發實操: 因為我們之前開發注冊的時候,就有了一些相關的操作,所以在這里我們只需要定義登錄的controller即可: //用戶登錄PostMapping("/login"…

mysql 8.0.27-docker

安裝 可以略過本步 https://dev.mysql.com/downloads/https://dev.mysql.com/downloads/ 鏡像查詢與安裝 先查詢: docker search mysql 明顯會報錯 Error response from daemon: Get "https://index.docker.io/v1/search?qmysql&n25": dial tcp…

Pgvector的安裝

Pgvector的安裝 向量化數據的存儲,可以為 PostgreSQL 安裝 vector 擴展來存儲向量化數據 注意:在安裝vector擴展之前,請先安裝Postgres數據庫 vector 擴展的步驟 1、下載vs_BuildTools 下載地址: https://visualstudio.microso…

Python高階函數-sorted(深度解析從原理到實戰)

一、sorted()函數概述 sorted()是Python內置的高階函數,用于對可迭代對象進行排序操作。與列表的sort()方法不同,sorted()會返回一個新的已排序列表,而不改變原數據。 基本語法 sorted(iterable, *, keyNone, reverseFalse)二、核心參數詳…

ArcGIS Pro/GeoScene Pro AI 助手 2.1

引言 面對ArcGIS Pro/GeoScene Pro復雜的操作界面和腳本開發需求,你是否還在為功能定位、代碼調試和效率優化而煩惱?今天,推出自制的Pro AI助手2.0版本,七大核心功能將革新你的GIS工作方式!無論是界面操作指引、一鍵生…

如何將本地更改的README文件同步到自己的GitHub項目倉庫

如何將本地更改的 README 文件同步到 GitHub 倉庫 在你 git clone 下來的工程目錄下: 先使用 robocopy YOUR\SOURCE\CODE\DIR YOUR\GIT\CLONE\DIR /E /XD .git /DCOPY:T 將你的更改Copy到你git下來的工程中(上面的命令會自動處理,例如只會C…

PostIn V1.0.8版本發布,IDEA 插件支持一鍵掃描上報,讓接口定義不再繁瑣

PostIn是一款國產開源免費的接口管理工具,包含項目管理、接口調試、接口文檔設計、接口數據MOCK等模塊,支持常見的HTTP協議、websocket協議等,支持免登陸本地接口調試,同時可以對項目進行靈活的成員權限、消息通知管理等。本周Pos…

UE5學習筆記 FPS游戲制作36 UI動畫

文章目錄 目的效果創建動畫UI準備制作動畫 播放動畫目的效果創建動畫UI準備制作動畫 播放動畫注冊播放事件 目的效果 我們要創建一個提示動畫,文字先漸顯,然后向上移動,同時漸隱 創建動畫 UI準備 創建一個UI控件,然后創建一個…

HTTP 響應頭 Strict-Transport-Security 缺失漏洞

HTTP 響應頭 Strict-Transport-Security 缺失漏洞 這個漏洞就是說明網站的HTTP響應頭中沒有設置Strict-Transport-Security,沒有設置則可以通過將https自己手動改成htttp的方式進行訪問。不安全 解決方法 1.nginx配置 nginx中增加如下配置: location / …

代理模式的優缺點是什么?

什么是代理模式? 代理模式(Proxy Pattern)是一種結構型設計模式,它通過創建代理對象來控制對原始對象的訪問。 這種模式在前端開發中廣泛應用,特別是在需要控制對象訪問、添加額外邏輯或優化性能的場景中。 ??核心…

【嵌入式學習3】UDP發送端、接收端

目錄 1、發送端 2、接收端 3、UDP廣播 1、發送端 from socket import *udp_socket socket(AF_INET,SOCK_DGRAM) udp_socket.bind(("127.0.0.1",3333))data_str "UDP發送端數據" data_bytes data_str.encode("utf-8") udp_socket.sendto(d…

AI重構SEO關鍵詞精準布局

內容概要 在傳統SEO策略面臨搜索場景碎片化、用戶意圖復雜化的挑戰下,AI技術通過多維數據分析與算法建模,正在重構關鍵詞布局的邏輯框架。基于自然語言處理(NLP)的語義分析能力,AI可精準識別搜索詞背后的需求層級&…

谷歌發布網絡安全AI新模型Sec-Gemini v1

谷歌近日宣布推出實驗性AI模型Sec-Gemini v1,旨在通過人工智能技術革新網絡安全防御體系。該模型由Sec-Gemini團隊成員Elie Burzstein和Marianna Tishchenko共同研發,旨在幫助網絡安全人員應對日益復雜的網絡威脅。 攻防不對稱的破局之道 Sec-Gemini團隊…

IntelliJ IDEA下開發FPGA——FPGA開發體驗提升__下

前言 由于Quartus寫代碼比較費勁,雖然新版已經有了代碼補全,但體驗上還有所欠缺。于是使用VS Code開發,效果如下所示,代碼樣式和基本的代碼補全已經可以滿足開發,其余工作則交由Quartus完成 但VS Code的自帶的git功能&…

Python語言的需求分析

Python語言的需求分析 引言 在信息技術快速發展的今天,編程語言的選擇對于軟件開發的成功與否起著至關重要的作用。Python作為一種高級編程語言,以其簡潔易讀的語法和強大的功能受到越來越多開發者的青睞。通過對Python語言的需求分析,我們…