R中的多类ROC曲线
Posted
技术标签:
【中文标题】R中的多类ROC曲线【英文标题】:Multiclass ROC curves in R 【发布时间】:2012-07-10 13:36:19 【问题描述】:我不熟悉 ROC 曲线的概念。我试图通过阅读网络上的一些教程来理解它。我在 python 中找到了一个非常好的示例here,这很有帮助。
我想为我(在 Python 中)构建的 multiclass 分类器绘制 ROC 曲线。但是,网络上的大多数解决方案都是针对2 类问题,而不是多类问题。
但是,我终于在 R 的 pROC 包中找到了“multiclass.roc”函数,它可以绘制多类 ROC 曲线。
下面是一个简单的例子:
library(pROC)
data(aSAH)
multiclass.roc(aSAH$gos6, aSAH$s100b)
但是,我不明白如何解释它(因为我不知道 R)。
谁能指出 aSAH$s100b 变量指的是什么?我可以说 aSAH$gos6 指向 aSAH 数据集中不同类别的数据。
【问题讨论】:
查看?multiclass.roc
了解该功能的工作原理。 ?'$'
$
语法的含义。 aSAH
是data.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曲线的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值plot.roc函数绘制ROC曲线添加置信区间为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来