MATLAB繪製ROC曲線並計算AUC值

2021-10-24 20:24:05 字數 1785 閱讀 6468

最近需要比較不同cnn網路的分類效果,用到了auc值,所以學習了下用matlab繪製roc曲線並計算auc值的**,總結如下。

1. 子函式**:

% 計算auc值,同時繪製roc曲線

% 二值分類,predict為**為真的概率值,ground_truth為真值標籤,均為一維向量

% 返回值:px, py為roc曲線上的點,auc為roc曲線下面面積值

% create date: 2020/10/16

function [px,py,auc] = calculate_roc(predict, ground_truth)

pos_num = sum(ground_truth == 1);

neg_num = sum(ground_truth == 0);

m = length(ground_truth);

[~, index] = sort(predict);

ground_truth = ground_truth(index);

px = zeros(m+1,1);

py = zeros(m+1,1);

auc = 0;

px(1) = 1; py(1) = 1;

for i = 2:m

tp = sum(ground_truth(i:m)==1);

fp = sum(ground_truth(i:m)==0);

px(i) = fp/neg_num;

py(i) = tp/pos_num;

auc = auc + (py(i)+py(i-1))*(px(i-1)-px(i))/2; % 梯形面積:(上底+下底)*高/2

endpx(m+1) = 0;

py(m+1) = 0;

auc = auc + py(m)*px(m)/2;

2. 主函式:

% 主函式,呼叫calculate_roc繪製roc曲線並計算auc值

clc;

clear;

sample_num = 100;

% 生成**概率值

predict(1:sample_num/4) = rand(1,sample_num/4)*0.05 + 0.95;

predict(sample_num/4+1:sample_num/2) = rand(1,sample_num/4)*0.1 + 0.9;

predict(sample_num/2+1:sample_num) = 0.98;

ground_truth = randi(2,1,sample_num)-1; % 生成0,1標籤真值

% 將均勻分布轉換成有非均勻分布

randnum = randi(sample_num);

part_index = randi(sample_num,1,randnum);

ground_truth(part_index) = 1;

[px, py, auc] = calculate_roc(predict, ground_truth);

disp(auc);

figure(1);

plot(px,py);

xlabel('false positive rate');

ylabel('true positive rate');

3. 繪製結果:

auc值:0.7039。

MATLAB中繪製ROC曲線

我們通常使用roc曲線來評價分類結果的好壞,在matlab中繪製該曲線其實也十分容易。我們讓label 表示真實的類別,output 表示 的類別,那麼呼叫 xrf,yrf,trf,aucrf perfcurve label,output,1 之後執行 plot xrf,yrf 即可得到roc曲線,...

繪製ROC曲線

roc曲線是什麼意思,書面表述為 roc 曲線 接收者操作特徵曲線 是一種顯示分類模型在所有分類閾值下的效果的圖表。好吧,這很不直觀。其實就是乙個二維曲線,橫軸是fpr,縱軸是tpr 至於tpr,fpr怎麼計算 然後tpr,fpr的定義為 tpr tp tp fn 也就是recall fpr fp ...

分類演算法如何繪製roc曲線 ROC曲線繪製方法

roc receiver operating characteristic 曲線即受試者工作特徵曲線。roc曲線與座標軸圍成的面積被稱為auc area under curve 這兩個指標和敏感性 特異性和準確性一起,是評估演算法模型效能常用的指標。在進一步介紹roc曲線如何繪製之前,先引入幾個概念...