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

Posted

技术标签:

【中文标题】为啥 perfcurve() matlab 函数给了我直线而不是预期的正常曲线?【英文标题】:why is perfcurve() matlab function giving me straight lines and not a normal curve as expected?为什么 perfcurve() matlab 函数给了我直线而不是预期的正常曲线? 【发布时间】:2015-01-16 12:32:02 【问题描述】:

我正在尝试构建接收器操作特征 (ROC) 曲线来评估我的分类器正确分类患病和未患病受试者的能力。

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

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

这与使用的观察次数有关吗? (在这种情况下,我只有 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');

【问题讨论】:

【参考方案1】:

你的数据可能太少了。

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

此外,除了 4 之外,所有的分数都完全相同(可能是 0)?还是那是你的分界线?

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于为啥 perfcurve() matlab 函数给了我直线而不是预期的正常曲线?的主要内容,如果未能解决你的问题,请参考以下文章

如何利用Matlab进行ROC分析

我用matlab中的imnoise函数给图像加椒盐噪声为啥产生的噪声不是黑白的?

为啥我装了matlab,windowa系统变量没有matlab的

matlab中function函数怎么用,为啥出错

为啥这段代码没有调用 Matlab 函数

为啥matlab中的ncread函数会减少浮点数? [复制]