【機器學習】ROC 曲線與 PR 曲線

目錄

一、混淆矩陣:分類評估的基礎

二. ROC 曲線 (Receiver Operating Characteristic Curve)

三. PR 曲線 (Precision-Recall Curve)

3.1 核心思想

4. 何時使用 ROC 曲線和 PR 曲線?

實驗結果

6. 總結


? ? 在機器學習的分類任務中,我們訓練模型的目標是準確地區分不同的類別。然而,模型的性能并非總是完美,它可能會犯一些錯誤。為了更好地評估和比較不同分類模型的性能,我們需要一些有效的評估指標和可視化工具。其中,ROC (Receiver Operating Characteristic) 曲線PR (Precision-Recall) 曲線 就是兩種非常重要的工具,尤其是在處理不平衡數據集時。

本文將深入探討 ROC 曲線和 PR 曲線的概念、計算方法以及如何使用 Python 中的 scikit-learn 庫來繪制它們。

一、混淆矩陣:分類評估的基礎

在理解 ROC 和 PR 曲線之前,我們需要先了解混淆矩陣 (Confusion Matrix)。對于一個二分類問題,混淆矩陣是一個 2x2 的表格,它總結了模型預測結果與真實標簽之間的關系:

預測為正例 (Positive)預測為負例 (Negative)
真實為正例 (Positive)

真陽性

(True Positive, TP)

假陰性

(False Negative, FN)

真實為負例 (Negative)

假陽性

(False Positive, FP)

真陰性

(True Negative, TN)

基于混淆矩陣,我們可以計算出一些基本的評估指標:

  • 準確率 (Accuracy): \frac{TP+TN}{TP+TN+FP+FN}?,表示模型預測正確的樣本比例。
  • 精確率 (Precision): \frac{TP}{TP+FP},表示在所有預測為正例的樣本中,真正例的比例。
  • 召回率 (Recall) (也稱為靈敏度或真正例率):\frac{ TP}{ TP+FN}?,表示在所有真實為正例的樣本中,被模型正確預測為正例的比例。
  • 假陽性率 (False Positive Rate, FPR):\frac{ FP}{ FP+TN}?,表示在所有真實為負例的樣本中,被模型錯誤預測為正例的比例。
  • 真陽性率 (True Positive Rate, TPR) (與召回率相同): \frac{TP}{TP+FN}

二. ROC 曲線 (Receiver Operating Characteristic Curve)

ROC 曲線是一種以 假陽性率 (FPR) 為橫軸,真陽性率 (TPR) 為縱軸繪制的曲線。它展示了在不同的分類閾值下,模型的 TPR 和 FPR 之間的權衡關系。

大多數分類器會輸出一個概率值或置信度分數,用于判斷樣本屬于哪個類別。我們可以通過調整這個分類閾值來改變模型的預測結果。例如,如果我們提高閾值,模型會更保守地將樣本預測為正例,這通常會降低 FPR,但也可能降低 TPR。ROC 曲線則將所有可能的閾值對應的 (FPR, TPR) 點連接起來,形成一條曲線。

AUC (Area Under the ROC Curve)

AUC 是 ROC 曲線下的面積,它是一個介于 0 和 1 之間的值。AUC 值越大,表示模型的整體性能越好。

  • AUC = 1: 完美分類器。
  • AUC = 0.5: 模型的性能與隨機猜測相當。
  • AUC < 0.5: 模型的性能比隨機猜測還要差(通常表示模型學習的方向錯誤,可以考慮反轉預測結果)。

三. PR 曲線 (Precision-Recall Curve)

PR 曲線是一種以 召回率 (Recall) 為橫軸,精確率 (Precision) 為縱軸繪制的曲線。它展示了在不同的分類閾值下,模型的精確率和召回率之間的權衡關系。

3.1 核心思想

與 ROC 曲線類似,PR 曲線也是通過調整分類閾值來觀察模型性能的變化。PR 曲線更關注正例的預測情況。

Average Precision (AP)

AP 是 PR 曲線下的面積,它衡量了在不同召回率水平上的平均精確率。AP 值越高,表示模型的性能越好。

4. 何時使用 ROC 曲線和 PR 曲線?

  • ROC 曲線: 通常在正負樣本比例相對平衡的情況下使用。它對類別不平衡問題不太敏感。ROC 曲線關注的是模型區分正負樣本的能力。

  • PR 曲線: 更適用于正負樣本比例非常不平衡的情況下。當正例非常稀少時,即使模型預測了一些假陽性,其假陽性率 (FPR) 可能仍然很低,導致 ROC 曲線看起來不錯。然而,此時的精確率 (Precision) 可能會很低,PR 曲線能夠更敏感地反映出這個問題。PR 曲線更關注模型在正例上的預測能力。

5. Python 代碼實現

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# 隨機生成一個二分類數據集
features, labels = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)# 將數據集劃分為訓練集和測試集
features_train, features_test, labels_train, labels_test = train_test_split(features, labels, test_size=0.3, random_state=42)# 初始化并訓練隨機森林分類器
model = RandomForestClassifier(random_state=42)
model.fit(features_train, labels_train)# 獲取模型在測試集上預測為正類的概率
probabilities = model.predict_proba(features_test)[:, 1]  # 獲取第二列,即正類的概率# 計算 ROC 曲線的 FPR、TPR 和閾值
false_positive_rate, true_positive_rate, thresholds_roc = roc_curve(labels_test, probabilities)
roc_auc_score = auc(false_positive_rate, true_positive_rate)# 計算 PR 曲線的精確率、召回率和閾值
precision_values, recall_values, thresholds_pr = precision_recall_curve(labels_test, probabilities)
average_precision = average_precision_score(labels_test, probabilities)# 繪制 ROC 曲線
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(false_positive_rate, true_positive_rate, color='darkorange', lw=2, label=f'ROC curve (AUC = {roc_auc_score:.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 (FPR)')
plt.ylabel('True Positive Rate (TPR) / Recall')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")# 繪制 PR 曲線
plt.subplot(1, 2, 2)
plt.plot(recall_values, precision_values, 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()

實驗結果

ROC曲線解讀:

  • 左下角 (0, 0): 表示模型將所有樣本都預測為負例。
  • 右上角 (1, 1): 表示模型將所有樣本都預測為正例。
  • 左上角 (0, 1): 這是理想的情況,表示模型在不產生任何假陽性的情況下,能夠識別出所有的真實正例。
  • 對角線 (y=x): 表示模型的性能與隨機猜測相當。
  • 曲線越靠近左上角,模型的性能越好。

PR曲線解讀:

  • 右上角 (1, 1): 這是理想的情況,表示模型在識別出所有正例的同時,預測的正例都是正確的。
  • 靠近右上角的曲線表示模型性能越好。
  • 曲線下的面積 (Average Precision, AP) 可以作為衡量 PR 曲線性能的指標。

6. 總結

ROC 曲線和 PR 曲線是評估二分類模型性能的強大工具。ROC 曲線關注模型區分正負樣本的能力,而 PR 曲線更關注模型在正例上的預測能力,尤其適用于不平衡數據集。通過理解和繪制這兩種曲線,我們可以更全面地了解模型的優缺點,并為模型選擇和調優提供有力的支持。在實際應用中,應根據具體的問題和數據的特點選擇合適的評估指標和可視化方法。

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

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

相關文章

Python高階函數-map

map() 是 Python 內置的一個高階函數&#xff0c;它接收一個函數和一個可迭代對象作為參數&#xff0c;將函數依次作用在可迭代對象的每個元素上&#xff0c;并返回一個迭代器&#xff08;Python 3.x 中&#xff09;。 基本語法 map(function, iterable, ...)function: 應用于…

上海餐飲市場數據分析與可視化

上海作為中國的經濟中心和國際化大都市,其餐飲市場具有高度的多樣性和競爭性。隨著消費者需求的不斷變化,餐飲行業的從業者和投資者需要深入了解市場現狀和趨勢,以便制定更有效的商業策略。本文將通過數據分析和可視化技術,深入探討上海餐飲市場的現狀和趨勢,為餐飲從業者…

MySQL基礎 [五] - 表的增刪查改

目錄 Create&#xff08;insert&#xff09; Retrieve&#xff08;select&#xff09; where條件 ?編輯 NULL的查詢 結果排序(order by) 篩選分頁結果 (limit) Update Delete 刪除表 截斷表&#xff08;truncate&#xff09; 插入查詢結果&#xff08;insertselect&…

SQL:Primary Key(主鍵)和Foreign Key(外鍵)

目錄 1. Key&#xff08;鍵&#xff09; 2. Index&#xff08;索引&#xff09; 3.Key和Index的區別 4. Primary Key&#xff08;主鍵&#xff09; 5. Foreign Key&#xff08;外鍵&#xff09; 6.主鍵和外鍵的關系 溫馨提示&#xff1a; 閃電按鈕不同的執行功能 首先&…

2025年- H1-Lc109-160. 相交列表--java版

1.題目描述 2.思路 “雙指針切換鏈表頭” 思路一&#xff1a;雙指針路徑對齊 while (pA ! pB) { pA (pA null) ? headB : pA.next; pB (pB null) ? headA : pB.next; } 讓兩個指針走相同的總路徑長度&#xff01; 設&#xff1a; 鏈表 A 獨有部分長度是 lenA 鏈表 B …

PyTorch 深度學習 || 6. Transformer | Ch6.3 Transformer 簡單案例

1. 簡單案例 這個代碼是一個簡單的 Transformer 模型的實現,這個例子展示了一個基本的序列到序列(seq2seq)任務,比如將一個數字序列轉換為另一個數字序列。可以用于學習和理解 Transformer 的基本結構和工作原理。 import torch import torch.nn as nn import math# 位置…

基礎算法篇(4)(藍橋杯常考點)—數據結構(進階)

前言 這期將會講到基礎算法篇里面的數據結構&#xff08;進階&#xff09;&#xff0c;主要包括單調棧&#xff0c;單調隊列&#xff0c;并查集&#xff0c;擴展域并查集&#xff0c;帶權并查集&#xff0c;字符串哈希&#xff0c;Trie樹。 數據結構(進階&#xff09;正文 單…

【AI學習】初步了解Gradio

Gradio 是一個開源的 Python 庫&#xff0c;專注于快速構建交互式 Web 界面&#xff0c;特別適用于機器學習模型、數據科學項目或任意 Python 函數的演示與部署。它通過極簡的代碼實現前后端一體化&#xff0c;無需前端開發經驗即可創建功能豐富的應用。以下是 Gradio 的核心特…

Overleaf 論文提交 Arxiv

Contents References 清除 Overleaf 中所有編譯 error&#xff0c;并且保證 main.tex 文件在 project 最上層參考文件 .bib 轉 .bbl. project 編譯成功后可以在 Overleaf 的 Recompile 按鈕右側找到 “Logs and output files”&#xff0c;點進去之后右下角可以點開 “Other lo…

【Android Audio】Parameter Framework - pfw

Parameter Framework - Android AudioPolicy Engine 使用 libengineconfigurable.so 來取締默認安卓音頻引擎 libenginedefault.so&#xff0c;因為默認安卓音頻引擎是通過代碼來決定策略&#xff0c;然而 libengineconfigurable 采用讀取pfw類型的文件來實現音頻策略配置。 …

服務器虛擬化技術深度解析:醫藥流通行業IT架構優化指南

一、服務器虛擬化的定義與原理 &#xff08;一&#xff09;技術定義&#xff1a;從物理到虛擬的資源重構 服務器虛擬化是通過軟件層&#xff08;Hypervisor&#xff09;將物理服務器的CPU、內存、存儲、網絡等硬件資源抽象為邏輯資源池&#xff0c;分割成多個相互隔離的虛擬機…

babel-runtime 如何縮小打包體積

&#x1f916; 作者簡介&#xff1a;水煮白菜王&#xff0c;一位前端勸退師 &#x1f47b; &#x1f440; 文章專欄&#xff1a; 前端專欄 &#xff0c;記錄一下平時在博客寫作中&#xff0c;總結出的一些開發技巧和知識歸納總結?。 感謝支持&#x1f495;&#x1f495;&#…

劍指Offer(數據結構與算法面試題精講)C++版——day7

劍指Offer&#xff08;數據結構與算法面試題精講&#xff09;C版——day7 題目一&#xff1a;最多刪除一個字符得到回文題目二&#xff1a;回文子字符串的個數題目三&#xff1a;刪除倒數第k個節點 題目一&#xff1a;最多刪除一個字符得到回文 這里我們可以在經典的字符串回文…

2025年常見滲透測試面試題(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 常見面試題 一、滲透測試經歷與技術復盤 二、高頻漏洞類型與攻防體系 三、滲透工具鏈與技術特性 四、…

大數據與人工智能之大數據架構(Hadoop、Spark、Flink)

一、核心特性與架構設計 1. Hadoop&#xff1a;分布式批處理的基石 核心組件&#xff1a; HDFS&#xff1a;分布式文件系統&#xff0c;支持大規模數據存儲。MapReduce&#xff1a;基于“分而治之”的批處理模型&#xff0c;適合離線分析。 架構特點&#xff1a; 批處理主導&…

從IoT到AIoT:智能邊界的拓展與AI未來趨勢預測

文章目錄 引言&#xff1a;從連接萬物到感知萬物1. AIoT的本質&#xff1a;將智能嵌入萬物2. AIoT的推動力量與挑戰2.1 推動力量2.2 關鍵挑戰 3. 五大AIoT未來趨勢預測趨勢一&#xff1a;邊緣智能將成為主流架構趨勢二&#xff1a;AI模型將向自適應與多任務演進趨勢三&#xff…

從本地新建文件夾到拉取遠程倉庫 dev 分支的完整步驟

《從本地新建文件夾到拉取遠程倉庫 dev 分支的完整步驟》 下面為你詳細介紹從本地新建文件夾開始&#xff0c;將遠程倉庫的 dev 分支拉取到本地的具體步驟&#xff1a; 1. 創建新文件夾 在本地電腦上新建一個文件夾&#xff0c;作為存放項目代碼的目錄。你可以通過圖形界面操…

python/pytorch雜聊

Dataset 是否需要自己定義&#xff1a;如果你使用的數據集不是 PyTorch 提供的標準數據集&#xff08;如 MNIST、CIFAR-10 等&#xff09;&#xff0c;那么你需要繼承 torch.utils.data.Dataset 類并實現兩個方法&#xff1a;__len__() 和 __getitem__()。__len__() 應該返回數…

PHP 安全 E-mail

PHP 安全 E-mail 引言 隨著互聯網的普及和電子商務的發展,電子郵件成為了人們日常生活中不可或缺的通信工具。PHP作為一種廣泛使用的服務器端腳本語言,也經常被用于發送和接收電子郵件。然而,在PHP中處理電子郵件時,安全性問題不容忽視。本文將深入探討PHP安全發送電子郵…

【夜話系列】DelayQueue延遲隊列(下):實戰應用與面試精講

?? 本文是DelayQueue系列的下篇,聚焦實戰應用場景和性能優化。通過多個真實案例,帶你掌握DelayQueue在項目中的最佳實踐和性能調優技巧。 ?? 系列專欄推薦: JAVA集合專欄 【夜話集】JVM知識專欄數據庫sql理論與實戰小游戲開發文章目錄 一、DelayQueue實戰應用1.1 訂單超…