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;