为什么perfcurve()matlab函数给我直线而不是预期的正常曲线?

时间:2014-11-19 04:55:26

标签: matlab statistics data-mining roc

我正在尝试建立一个接受者操作特征(ROC)曲线,以评估我的分类器正确分类患病和非患病受试者的辨别能力。

据我所知,曲线越接近左边界,然后是ROC空间的顶边,测试越准确。我的实验给了我非常理想的曲线下面积值(auc),即0.86458。然而,ROC曲线(我在其中包括用于追踪目的的截止点)似乎很奇怪,因为它给了我如下的直线:

enter image description here

...而不是我期望的曲线,正如我通常从这样的参考资料中看到的那样:

enter image description here

是否与使用的观察数量有关? (在这种情况下,我只有50个样本)。或者只要auc值很高并且“曲线”曲线很好就可以了。来自ROC空间的45度对角线?如果有人可以分享他们的想法,我会很高兴。谢谢!

顺便说一下,我在matlab中使用了perfcurve()函数:

% ROC comparison between the proposed approach and the baseline
[X1,Y1,T1,auc1,OPTROCPT1,SUBY5,SUBYNAMES1] = perfcurve(testLabel,predlabel_prop,1); 
[X2,Y2,T2,auc2,OPTROCPT2,SUBY2,SUBYNAMES2] = perfcurve(testLabel,predLabel_base,1);

figure;
plot(X1,Y1,'-r*',X2,Y2,'--ko');
legend('proposed approach','baseline','Location','east');
xlabel('False positive rate'); ylabel('True positive rate')
title('ROC comparison of the proposed approach and the baseline')

text(0.6,0.3,{'* - proposed method',strcat('Area Under Curve = ',...
    num2str(auc1))},'EdgeColor','r');

text(0.6,0.15,{'o - baseline',strcat('Area Under Curve = ',num2str(auc2))},'EdgeColor','k');

2 个答案:

答案 0 :(得分:1)

你可能有太多的数据。

曲线表示您的数据集有13个负数和5个正数(在您的测试集中?)

此外,除了4之外的所有人都完全相同的分数(可能是0)?或者那是你的截止日期?

鉴于样本量很小,我会不接受您提出的方法优于基线的假设,但接受替代方案 - 方法的表现与其他方法一样好:差异为0.04这个微小的样本量太小了,结果几乎相同。截止区域内的任何变化(对角线部分)都可以比0.04大得多......在不同的运行中,不同的测试集,结果可能是相反的。

答案 1 :(得分:0)

曲线的形状只是模型的高解释力和有限的观测数量的结果(例如,请查看此处的示例http://nl.mathworks.com/help/stats/perfcurve.html)。