【问题标题】:Multiclass ROC curves in RR中的多类ROC曲线
【发布时间】:2012-07-10 13:36:19
【问题描述】:

我不熟悉 ROC 曲线的概念。我试图通过阅读网络上的一些教程来理解它。我在 python 中找到了一个非常好的示例here,这很有帮助。

我想为我(在 Python 中)构建的 multiclass 分类器绘制 ROC 曲线。但是,网络上的大多数解决方案都是针对2 类问题,而不是多类问题

但是,我终于在 RpROC 包中找到了“multiclass.roc”函数,它可以绘制多类 ROC 曲线。

下面是一个简单的例子:

library(pROC)
data(aSAH)
multiclass.roc(aSAH$gos6, aSAH$s100b)

但是,我不明白如何解释它(因为我不知道 R)。

谁能指出 aSAH$s100b 变量指的是什么?我可以说 aSAH$gos6 指向 aSAH 数据集中不同类别的数据。

【问题讨论】:

  • 查看?multiclass.roc 了解该功能的工作原理。 ?'$' $ 语法的含义。 aSAHdata.frame,所以看看?data.frame
  • 观看前几个 R 教程视频:http://www.twotorials.com/。这将使您了解那里发生的基本情况。
  • 嗨@garak,我知道这是一个老问题,但为了完整起见,我添加了一个后续答案,其中包含 3 个最小可重复示例,解释了pROC::multiclass.roc() 所需的必要对象。我希望它可以帮助未来的用户。

标签: r machine-learning artificial-intelligence classification


【解决方案1】:

此外,您可能想查看Fawcett, 2006 以获得理解和实施 ROC 图的非常好的指南。他还讨论了多类 ROC 和 AUC,以及其他资源。

【讨论】:

    【解决方案2】:

    我知道这是一个老问题,但为了完整起见,对于未来的访问者,我将使用pROC::multiclass.roc() 函数添加一个简短的示例列表。在软件方面,唯一的要求就是确保预测矩阵的列名与真实类匹配(real_values)。

    第一个示例生成随机预测。第二个产生更好的预测。第三个生成完美的预测(即始终将最高概率分配给真实类。)

    我打印了head(obj)的结果,因此不需要R理解来跟进示例。

    pROC::multiclass.roc() 使用的计算的技术细节可以在Hand & Till (2001) 找到:ROC 曲线下区域的简单概括,用于多类分类问题。机器学习,45(2),171-186。

    library(pROC)
    set.seed(42)
    head(real_values)
    real_values <- matrix( c("class1", "class2", "class3"), nc=1 )
    
    # [,1]    
    # [1,] "class1"
    # [2,] "class2"
    # [3,] "class3"
    ############################
    #### Random predictions ####
    ############################
    random_preds <- matrix(rbeta(3*3,2,2), nc=3)
    random_preds <- sweep(random_preds, 1, rowSums(a1), FUN="/")
    colnames(random_preds) <- c("class1", "class2", "class3")
    
    
    head(random_preds)
    
    #       class1    class2    class3
    # [1,] 0.3437916 0.6129104 0.4733117
    # [2,] 0.6016169 0.4700832 0.9364681
    # [3,] 0.6741742 0.8677781 0.4823129
    
    multiclass.roc(real_values, random_preds)
    #Multi-class area under the curve: 0.1667
    
    ############################
    #### Better Predictions ####
    ############################
    
    better_preds <- matrix(c(0.75,0.15,0.5,
                             0.15,0.5,0.75,
                             0.15,0.75,0.5), nc=3)
    colnames(better_preds) <- c("class1", "class2", "class3")
    
    head(better_preds)
    
    #       class1 class2 class3
    # [1,]   0.75   0.15   0.15
    # [2,]   0.15   0.50   0.75
    # [3,]   0.50   0.75   0.50
    
    multiclass.roc(real_values, better_preds)
    #Multi-class area under the curve: 0.6667
    
    
    #############################
    #### Perfect Predictions ####
    #############################
    perfect_preds <- matrix(c(0.75,0.15,0.5,
                              0.15,0.75,0.5,
                              0.15,0.5,0.75), nc=3)
    colnames(perfect_preds) <- c("class1", "class2", "class3")
    head(perfect_preds)
    
    multiclass.roc(real_values, perfect_preds)
    #Multi-class area under the curve: 1
    

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 2019-02-27
      • 2021-03-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2013-09-28
      • 2018-12-24
      • 2022-01-13
      相关资源
      最近更新 更多