**请问matlab画的多分类roc曲线
分别是用的支持向量机和决策树进行分类,看上去好奇怪
方法参考的:
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《多分类ROC曲线》, 一起来围观吧 https://blog.csdn.net/u011047955/article/details/87259052?utm_source=app&app_version=5.3.1
其中的多分类roc的方法二
代码是参考了http://t.csdn.cn/VeclB
function [xmean,ymean,AUC]= ROC(test_label,scores)
%%输入预测值和真实值
n=length(test_label);test_label=test_label';test_lab=[];
for i=1:n
a=test_label(i);
test_lab(a,i)=1;
i=i+1;
end
test_lab1=test_lab(1,:);test_lab2=test_lab(2,:);test_lab3=test_lab(3,:);
test_lab4=test_lab(4,:);test_lab5=test_lab(5,:);
scoress=scores';
s1=scoress(1,:);s2=scoress(2,:);s3=scoress(3,:);s4=scoress(4,:);s5=scoress(5,:);
label=[test_lab1,test_lab2,test_lab3,test_lab4,test_lab5];
p=[s1,s2,s3,s4,s5];
confu = zeros(2,2); %定义混淆矩阵
x_label1=[]; y_label1=[]; yy=[]; %定义画图变量
xx=1;
%ROC运算
for value=0:0.01:1
box = zeros(1,size(p,2)); %定义缓存向量
for i=1:size(p,2)
if p(i)>=value %判断阈值
if p(i)>value %判断阈值
box(i) = 1;
else
box(i) = 0;
end
if box(i)==0 && label(i)==0 %导入混淆矩阵
confu(2,2) = confu(2,2) + 1; %TN
elseif box(i)==0 && label(i)==1
confu(1,2) = confu(1,2) + 1; %FN
elseif box(i)==1 && label(i)==0
confu(2,1) = confu(2,1) + 1; %FP
elseif box(i)==1 && label(i)==1
confu(1,1) = confu(1,1) + 1; %TP
end
end
TN=confu(2,2); FN=confu(1,2); FP=confu(2,1); TP=confu(1,1);
FPR = FP/(FP+TN); %定义式
TPR = TP/(TP+FN);
x_label1(xx) = FPR; %画图坐标赋值
y_label1(xx) = TPR;
yy(xx) = FPR;
xx=xx+1;
end
AUC = -1*trapz(x_label1,y_label1); %求AUC值(曲线的面积)
%画ROC图
figure
plot(x_label1,y_label1);
title({'ROC曲线', ['AUC = ', num2str(AUC)]});
xlabel("FPR");
ylabel("TPR");
hold on
plot(x_label1, yy,'g');
end