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;