最近需要比較不同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曲線如何繪製之前,先引入幾個概念...