代码之家  ›  专栏  ›  技术社区  ›  af101

使用PRROC包的ROC曲线中的数据值

  •  2
  • af101  · 技术社区  · 7 年前

    我试图绘制一条识别器的ROC曲线,用于根据背景数据集确定阳性发病率。标识符是两组之间有一些重叠的概率分数列表。

    FG          BG
    0.02        0.10
    0.03        0.25 
    0.02        0.12
    0.04        0.16
    0.05        0.45
    0.12        0.31
    0.13        0.20
    

    (其中FG=正,BG=负。)

    我使用R中的PRROC绘制ROC曲线,以评估标识符将数据分类到正确组的效果。虽然在正数据集和负数据集之间产生的分类器值之间有明显区别,但我目前在R中的ROC图显示AUC值较低。我对阳性数据的概率分数低于背景,因此如果我切换分类并将背景作为前景点,我会得到一条高分AUC曲线,我不完全清楚为什么会出现这种情况,哪一个图是最好使用的,或者在分析数据之前我是否错过了其他步骤。

    roc<-大鹏。曲线(scores.class0=FG,scores.class1=BG,曲线=T)

    ROC curve
    
    Area under curve:
    0.07143
    

    roc2<-大鹏。曲线(scores.class0=BG,scores.class1=FG,曲线=T)

    ROC curve
    
    Area under curve:
    0.92857
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Calimo    7 年前

    正如你确实注意到的那样,大多数ROC分析工具都假设你的积极班级的分数高于消极班级的分数。更正式地说,如果X>T、 其中T是判定阈值,否则为负值。

    这样做没有根本原因。有一个像X<T、 然而,大多数ROC软件没有这个选项。

    使用导致AUC=0.07143的第一个选项意味着分类器的性能比随机分类器差。这是不正确的。

    正如您所注意到的,交换类标签会生成正确的曲线值。 这是可能的,因为ROC曲线对类分布不敏感,并且类可以毫无问题地还原。 然而,我个人不建议这样做。我发现有两种情况可能会产生误导:

    • 给别人看代码,或者几个月后给自己看;找出类是错误的并“修复”它们
    • 或者,如果要将相同的代码应用于PR曲线,该曲线对类分布很敏感,并且不能交换类。

    另一种更可取的方法是颠倒你在该分析中的分数,以便积极的课堂有效地获得更高的分数:

    roc <- roc.curve(scores.class0 = -FG, scores.class1 = -BG, curve = T)