Matlab繪製ROC曲線並計算AUC面積

ROC曲線是根據在二分類時,設定不同的分類閾值得到的真陽性率(TPR)和僞陽性率(FPR)得到的。

如圖括號格式爲(預測的標籤,實際的標籤)。

(sensitivity) TPR=TP/(TP+FN)= (1,1)/((1,1)+(0,1))

(1-specificity) FPR=FP/(FP+FN)= (1,0)/((1,0)+(0,0))

F1 = 2TP/(2TP+FP+FN)

ROC曲線的Matlab繪製以及AUC面積計算如下:

AUC面積爲梯形面積之和。

% 2018/4/27 Matlab
%scores爲每個樣本屬於1類的概率,testclass分爲0類和1類
%輸出res爲AUC面積,計算方式爲矩形面積之和,sum1爲ROC曲線的tpr和fpr值對
function [res,sum1] = AUCROC(testclass,scores)
[m,n] = size(testclass);
tpr = zeros(51,1);
fpr = zeros(51,1);
num = 0;
AUC = 0;
for x = 0:0.02:1
    num=num+1;
    tp = 0;
    fn = 0;
    fp = 0;
    tn = 0;
    for y = 1:m
        if scores(y,1)>= x && testclass(y,1)== 1
            tp=tp+1;
        elseif scores(y,1)>=x && testclass(y,1)==0
            fp=fp+1;
        elseif scores(y,1)<x && testclass(y,1)==0
            tn=tn+1;
        elseif scores(y,1)<x && testclass(y,1)==1
            fn=fn+1;
        end
    end
    plot(tp,fp);
    hold on
    tpr(num,1) = tp/(tp+fn);
    fpr(num,1) = fp/(fp+fn);
    plot(fpr(num,1),tpr(num,1));
    hold on
end
sum = [fpr tpr];
sum1 = sortrows(sum);

for i=1:50
    line([sum1(i,1) sum1(i,1)],[sum1(i,2) sum1(i+1,2)],'linewidth',1.5,'color','r');
    hold on 
    line([sum1(i,1) sum1(i+1,1)],[sum1(i+1,2) sum1(i+1,2)],'linewidth',1.5,'color','r');
    hold on
    AUC = AUC + 0.02*((sum1(i+1,2)+sum1(i,2))/2;
end
line([0 1],[0,1],'linewidth',1.5,'color','b');
hold on 
axis([0 1 0 1]);
set(gca,'XTick',0:0.2:1);
set(gca,'YTick',0:0.2:1);
res = AUC;
%p = fig2plotly;

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章