roc曲线画成这样是正常的吗

**请问matlab画的多分类roc曲线
分别是用的支持向量机和决策树进行分类,看上去好奇怪

img

img

方法参考的:
我用#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