【问题标题】: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');

【问题讨论】:

    标签: matlab statistics data-mining roc


    【解决方案1】:

    你的数据可能太少了。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-07-04
        • 1970-01-01
        • 2020-08-11
        • 2016-03-27
        • 1970-01-01
        • 2019-03-04
        • 2021-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多