【matlab】繪制maxENT模型的ROC曲線和omission curve

文章目錄

  • 一、maxENT模型
  • 二、ROC曲線
  • 三、實操
    • 3.1 數據提取
    • 3.2 繪制ROC曲線
    • 3.3 繪制遺漏曲線
    • 3.4 多次訓練的ROC和測試的ROC

一、maxENT模型

前面的文章已經詳細講過了。

maxENT軟件運行后,會生成一個html報告,里面有ROC曲線,但我們往往需要自己畫圖,設計一下樣式,而不是直接使用輸出的圖像。

二、ROC曲線

ROC 曲線,即受試者工作特征曲線(Receiver Operating Characteristic Curve),是用來評估二分類模型性能的重要工具。

  • 二分類決策:在二分類模型中,模型通常根據某個閾值(threshold)將樣本預測為正例或負例。調整這個閾值會影響預測結果,從而改變模型的敏感性(正確識別正例的能力)和特異性(正確排除負例的能力)。

  • 混淆矩陣要素

    • 真陽性(TP):被正確預測為正例的樣本數量。
    • 真陰性(TN):被正確預測為負例的樣本數量。
    • 假陽性(FP):被錯誤預測為正例的負樣本數量。
    • 假陰性(FN):被錯誤預測為負例的正樣本數量。

🔹主要指標

  • 真正率(True Positive Rate, TPR):也稱為敏感性或召回率,計算公式為

    T P R = T P T P + F N TPR = \frac{TP}{TP + FN} TPR=TP+FNTP?

    該指標反映模型檢測到正類的比例。

  • 假正率(False Positive Rate, FPR):計算公式為
    F P R = F P F P + T N FPR = \frac{FP}{FP + TN} FPR=FP+TNFP?
    該指標反映在所有負樣本中誤判為正樣本的比例。

在 ROC 曲線上,TPR 是縱軸,而 FPR 是橫軸。


?? 如何繪制 ROC 曲線

  1. 設置不同閾值:對于一個分類器,可以從 0 到 1 選擇若干不同的概率閾值。
  2. 計算指標:對于每個閾值,依據預測結果計算對應的 TPR 和 FPR。
  3. 繪圖:將每個閾值對應的 (FPR, TPR) 點在二維坐標系中描繪出來,并連接這些點,形成一條曲線。

隨著閾值的變化:

  • 當閾值很高時,模型較為嚴格,只預測非常有信心的樣本為正例,此時 TPR 較低,FPR 也較低。
  • 當閾值很低時,更多樣本被預測為正例,TPR 提高,但同時 FPR 也會上升。

??曲線下的面積(AUC)

  • AUC(Area Under the Curve):ROC 曲線下的面積代表了模型的整體區分能力。
    • AUC = 1:理想模型,能完美區分正負樣本。
    • AUC = 0.5:與隨機猜測相當,說明模型沒有區分能力。
      AUC 數值越大,說明模型在不同閾值下保持了較高的 TPR 同時控制了 FPR 的上升,表現越優。

🗝?ROC 曲線的應用與特點

  • 獨立于樣本類別分布:與精確度(accuracy)不同,ROC 曲線上各點的計算不受類別比例影響,對于類別分布不平衡的問題,ROC 依然能有效反映模型性能。
  • 決策閾值選擇:通過 ROC 曲線,可以直觀地看到在不同閾值下模型的表現,從而幫助選擇一個合適的平衡點。例如,在醫療診斷中,可能更傾向于降低假陰性(提高 TPR),即使假陽性(FPR)上升。
  • 模型比較:當需要比較多個模型時,ROC 曲線及其 AUC 值可以作為一個統一的指標。如果一條 ROC 曲線始終在另一條之上,那么前者所對應的模型通常表現更好。

三、實操

3.1 數據提取

首先是maxENT軟件的設置,上上篇文章末尾寫了。

比如:第三列(最后一張圖)那個:Write background predictions選項可以選上,我截圖的時候沒選擇。這個輸出數據可以用來自己話ROC曲線。

我設置模型運行10次,輸出文件夾里面會有10對這樣的文件:當然還有其它文件,這些是畫圖需要的。
在這里插入圖片描述
我預測了多個物種的適生區,每個10次,取均值。

所以首先要根據物種,把csv文件提取出來。代碼示例:

%% 提取maxent多次訓練后的輸出csv并按物種分別保存%%
clear
clc% 設置源文件夾路徑和目標文件夾路徑
sourceFolder = 'xxx';  % 這里填寫源文件夾路徑
destinationFolder = 'xxx';  % 這里填寫目標文件夾路徑% 獲取源文件夾中所有csv文件
csvFiles = dir(fullfile(sourceFolder, '*.csv'));% 遍歷所有文件
for i = 1:length(csvFiles)% 獲取文件名fileName = csvFiles(i).name;% 檢查文件名是否包含 backgroundPredictions 或 samplePredictionsif contains(fileName, 'backgroundPredictions') || contains(fileName, 'samplePredictions')% 使用正則表達式提取動物名稱(保留中間的下劃線,去除尾部的下劃線)animalName = regexp(fileName, '^[a-zA-Z_]+(?=\d)', 'match', 'once');% 去除末尾的下劃線(如果有)if animalName(end) == '_'animalName = animalName(1:end-1);end% 創建以動物名稱命名的目標文件夾,如果文件夾不存在則創建animalFolder = fullfile(destinationFolder, animalName);if ~exist(animalFolder, 'dir')mkdir(animalFolder);end% 復制文件到相應的文件夾copyfile(fullfile(sourceFolder, fileName), fullfile(animalFolder, fileName));end
enddisp('文件復制完成');

執行后,會有一個data(假設)文件夾,文件夾下面每個物種有一個文件夾,文件夾里面是10對csv數據。

3.2 繪制ROC曲線

這是一次預測的曲線,不是多次預測的平均:

%% 1. 讀取數據clear
clcpresence = readtable('xxx_samplePredictions.csv',VariableNamingRule='preserve');
background = readtable('xxx_backgroundPredictions.csv',VariableNamingRule='preserve');% 屬性名設置
presence.Properties.VariableNames = strrep(presence.Properties.VariableNames, ' ', '_');
background.Properties.VariableNames = strrep(background.Properties.VariableNames, ' ', '_');%% 2. 計算AUC% 提取預測值
pp = presence.Cloglog_prediction; % presence 數據中的預測
bb = background.Cloglog; % background 數據中的預測% 測試集 AUC
testpp = pp(presence.Test_or_train == "test");
combined = [testpp; bb];
label = [ones(length(testpp), 1); zeros(length(bb), 1)];
[~, ~, ~, AUC_test] = perfcurve(label, combined, 1);% 訓練集 AUC
trainpp = pp(presence.Test_or_train == "train");
combined_train = [trainpp; bb];
label_train = [ones(length(trainpp), 1); zeros(length(bb), 1)];
[~, ~, ~, AUC_train] = perfcurve(label_train, combined_train, 1);% 輸出 AUC 值
disp(['Test AUC: ', num2str(AUC_test)]);
disp(['Train AUC: ', num2str(AUC_train)]);%% 3. 繪制 ROC 曲線
[X_test, Y_test, ~, ~] = perfcurve(label, combined, 1);
[X_train, Y_train, ~, ~] = perfcurve(label_train, combined_train, 1);figure;
plot(X_test, Y_test, 'Color', '#5EC1C7', 'LineWidth', 1.5); % 測試集 ROC
hold on;
plot(X_train, Y_train, 'Color', '#DA4A22', 'LineWidth', 1.5); % 訓練集 ROC
plot([0, 1], [0, 1], 'k--'); % 對角線
xlabel('1 - Specificity');
ylabel('Sensitivity');
title('ROC Curve');
legend({'Test Set', 'Train Set', 'Random'}, 'Location', 'Best');
ylim([0 1.1])
grid minor;
hold off;

在這里插入圖片描述

3.3 繪制遺漏曲線

maxENT的輸出稱作:omission curve

在這里插入圖片描述

這個數據使用的是模型輸出文件夾里面的,上面的代碼沒有提取。這里只是示例。

%% 4. 繪制遺漏曲線% 讀取遺漏數據
omission = readtable('xxx_omission.csv',VariableNamingRule='preserve');
omission.Properties.VariableNames = strrep(omission.Properties.VariableNames, ' ', '_');% 繪制遺漏曲線
figure;
plot(omission.Corresponding_cumulative_value, omission.Fractional_area, 'Color', '#DA4A22', 'LineWidth', 1.5); % Fractional area
hold on;
plot(omission.Corresponding_cumulative_value, omission.Test_omission, 'Color', '#5EC1C7', 'LineWidth', 1.5); % Test omission
plot(omission.Corresponding_cumulative_value, omission.Training_omission, 'Color', '#9EC735', 'LineWidth', 1.5); % Training omission
plot([0, 100], [0, 1], 'k--'); % 對角線
xlabel('Cumulative threshold');
ylabel('Fractional value');
title('Omission Curve');
legend({'Fractional Area', 'Test Omission', 'Training Omission', 'Random'}, 'Location', 'Best');
grid minor;
hold off;

3.4 多次訓練的ROC和測試的ROC

這個不免費了,價格10快,愿意就Buy,如果你需要的話還是很值的,我也不能用愛發電哈哈🤭。

URL:https://mbd.pub/o/bread/aJqclJ9y

在這里插入圖片描述


繪制效果:
在這里插入圖片描述

maxENT的報告繪制的:這兩個都是訓練的ROC曲線,我的代碼還有測試的ROC曲線(maxENT報告沒有)。
在這里插入圖片描述

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

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

相關文章

nginx 核心功能

目錄 一、基于授權的訪問控制 1. 使用 htpasswd 生成用戶認證文件 2. 修改 Nginx 主配置文件 二、基于客戶端的訪問控制 三、Nginx 虛擬主機 1. 基于域名的虛擬主機 2. 基于 IP 的虛擬主機 3. 基于端口的虛擬主機 四、LNMP 架構部署及應用 1. 安裝 MariaDB 2. 安裝并…

mongoose插入文檔,字段類型, 字段驗證, 刪除文檔,更新文檔,讀取文檔,查詢文檔的條件控制 ,字段篩選,數據排序,數據截取

、Mongoose 中與 文檔操作(插入、查詢、更新、刪除)及其相關功能(字段類型、驗證、條件篩選、排序、分頁等)相關示例: 📋 一、字段類型定義(Schema Types) const mongoose require…

類和對象 (拷貝構造函數和運算符重載)上

類和對象 (拷貝構造函數和運算符重載)上 拷貝構造函數存在的原因及解決的 C 語言問題 1. 淺拷貝帶來的問題 在 C 語言里,當對結構體或者數組進行拷貝操作時,執行的是淺拷貝。所謂淺拷貝,就是單純地把一個對象的所有成員變量的值復制到另一…

Python深度挖掘:openpyxl和pandas的使用詳細

文章目錄 一、Excel處理在數據分析中的重要性二、openpyxl基礎與核心功能2.1 openpyxl簡介與安裝2.2 工作簿與工作表的基本操作創建新工作簿打開已有工作簿工作表操作 2.3 單元格操作詳解基本單元格操作批量操作單元格特殊單元格操作 2.4 樣式與格式設置字體樣式對齊方式邊框設…

Android Q允許低內存啟用系統彈窗

如果SYSTEM_ALERT_WINDOW權限可用,則返回true。 *從Q開始,在低ram手機上禁用SYSTEM_ALERT_WINDOW。 vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/Utils.java public static boolean isSystemAlertWindowEnabled(Co…

taro小程序如何實現大文件(視頻、圖片)后臺下載功能?

一、需求背景 1、需要實現小程序下載最大500M視頻 2、同時需支持圖片下載 3、退到其他頁面再次回到當前頁面時,下載進度也需要展示 二、實現步驟 1、在app.ts文件定義一個全局變量globalDownLoadData 2、寫一個獨立的下載hooks,代碼如下(…

BUUCTF——Online Tool

BUUCTF——Online Tool 進入靶場 <?phpif (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {$_SERVER[REMOTE_ADDR] $_SERVER[HTTP_X_FORWARDED_FOR]; }if(!isset($_GET[host])) {highlight_file(__FILE__); } else {$host $_GET[host];$host escapeshellarg($host);$host e…

《解鎖CSS Flex布局:重塑現代網頁布局的底層邏輯》

網頁布局作為用戶體驗的基石&#xff0c;其重要性不言而喻。從早期簡單的表格布局&#xff0c;到后來基于浮動與定位的復雜嘗試&#xff0c;網頁布局技術始終在不斷演進。而CSS Flex布局的出現&#xff0c;宛如一顆璀璨的新星&#xff0c;徹底革新了網頁布局的設計理念與實踐方…

4.28-4.29 Vue

基于數據渲染出用戶看到的頁面。 常用指令&#xff1a; click單擊事件。 axios&#xff1a; 發出請求后&#xff0c;不會等待請求結束&#xff0c;而是繼續進行下面的代碼。

每日算法-250429

每日 LeetCode 題解 (2025-04-29) 大家好&#xff01;這是今天的 LeetCode 刷題記錄&#xff0c;主要涉及幾道可以使用貪心策略解決的問題。 2037. 使每位學生都有座位的最少移動次數 題目描述: 思路 貪心 解題過程 要使總移動次數最少&#xff0c;直觀的想法是讓每個學生…

yolov8+kalman 實現目標跟蹤統計人流量

簡述 最近接了畢業生的畢業設計題&#xff0c;想著幫幫忙&#xff0c;要使用機器視覺識別&#xff0c;追蹤和邏輯統計的方式來統計人流&#xff0c;要求是滿足下面特性 高精度&#xff1a;YOLOv8 提供高質量檢測&#xff0c;卡爾曼濾波平滑跟蹤。高效率&#xff1a;兩者結合滿…

Shopify網上商店GraphQL Admin接口查詢實戰

目錄 一、Shopify網上商店 二、個人商店配置接口權限 三、PostMan調用接口測試 四、通過Java服務調用接口 一、Shopify網上商店 Shopify是由Tobi Ltke創辦的加拿大電子商務軟件開發商&#xff0c;總部位于加拿大首都渥太華&#xff0c;已從一家在咖啡店辦公的 5人團隊&…

【Tips】高效文獻管理:Zotero 導入參考文獻的多種方式詳解

高效文獻管理&#xff1a;Zotero 導入參考文獻的多種方式詳解 在學術研究中&#xff0c;高效管理參考文獻是提升效率的關鍵。Zotero 作為一款強大的文獻管理工具&#xff0c;提供了多種便捷的文獻導入方式。以下結合文獻題錄完整性對比分析&#xff0c;為大家詳細介紹 Zotero …

[AI]browser-use + web-ui 大模型實現自動操作瀏覽器

[AI]browser-use web-ui 大模型實現自動操作瀏覽器 介紹 官方地址&#xff1a;https://github.com/browser-use/web-ui browser-use主要作用是將 AI Agent 與瀏覽器鏈接起來從而實現由 AI 驅動的瀏覽器自動化。今天會給大家介紹如何通過browser-use web-ui來搭建并操作browse…

Springboot請求靜態資源時,request.getServletPath() 返回error

大家好&#xff0c;我是 程序員碼遞夫。 SpringBoot請求靜態資源時&#xff0c;request.getServletPath() 返回error&#xff0c; 明明我的目錄文件是存在的怎么就報錯了呢&#xff1f; 如我請求 http://127.0.0.1:9090/Hanfu/upload/1647161536390.png 通常是因為請求的資…

在開發板上如何處理curl: (60) SSL certificate problem

目錄 引言 問題解析 解決方法 跳過證書驗證 采用證書認證 結語 引言 最近一直推薦學生們在課程實驗中使用curl及其libcurl。curl 是一個強大的命令行工具&#xff0c;用于在命令行中進行數據傳輸。它支持多種協議&#xff0c;如 HTTP、HTTPS、FTP、FTPS、SCP、SFTP 等。…

CSRF請求偽造

該漏洞主要是關乎于用戶&#xff0c;告誡用戶不可亂點擊鏈接&#xff0c;提升自我防范&#xff0c;才能不落入Hacker布置的陷阱&#xff01; 1. cookie與session 簡單理解一下兩者作用 1.1. &#x1f36a; Cookie&#xff1a;就像超市的會員卡 存儲位置&#xff1a;你錢包里…

Python循環與遍歷詳解:從入門到進階

在Python編程中&#xff0c;循環和遍歷是最基礎但極其重要的知識點。理解并掌握這部分內容&#xff0c;是編寫高效、清晰代碼的前提。本文將從for循環和while循環的基本語法出發&#xff0c;逐步深入探討range、enumerate、zip、列表推導式、字典遍歷等Python中常見的遍歷技巧&…

Python-MCPServer開發

Python-MCPServer開發 使用FastMCP開發【SSE模式的MCPServer】&#xff0c;熟悉【McpServer編碼過程】【McpServer調試方法】 1-核心知識點 1-熟悉【SSE模式的MCPServer】開發2-熟悉【stdio模式的MCPServer】開發3-熟悉【啟動MCPServer】的三種方式 3.1-直接啟動:python mcp_s…

高級項目管理

在信息系統項目管理工作中&#xff0c;組織管理者和項目管理者&#xff0c;有時還會面臨多項目的管理&#xff0c;或組織級的項目管理、項目的量化管理等課題。 其中&#xff0c;項目集管理、項目組合管理和組織級項目管理&#xff0c;為多項目管理和組織級管理提供有效指導&a…