R中的多类ROC曲线

Posted

技术标签:

【中文标题】R中的多类ROC曲线【英文标题】:Multiclass ROC curves in R 【发布时间】: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() 所需的必要对象。我希望它可以帮助未来的用户。 【参考方案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

【讨论】:

以上是关于R中的多类ROC曲线的主要内容,如果未能解决你的问题,请参考以下文章

如何从真实类和预测类绘制多类 Roc 曲线

R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值plot.roc函数绘制ROC曲线添加置信区间为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来

使用 ROCR 包的 R 中的 ROC 曲线

R中的ROC曲线使用rpart包?

在 R 中的 ggplot 中访问 roc 曲线的 TPR 和 FPR

从 R 中的交叉验证(训练)数据中绘制 ROC 曲线