R中的多类ROC曲线

时间:2012-07-11 00:59:28

标签: r machine-learning artificial-intelligence classification

我是 ROC曲线概念的新手。我试着通过阅读网上的一些教程来理解它。我在python中找到了一个非常好的例子here,这很有帮助。

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

然而,我终于在 R 中的 pROC 包中找到了“multiclass.roc”函数,该函数执行多类ROC曲线绘制。

以下是一个简单的例子:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我知道这是一个老问题,但出于完整性考虑,对于将来的访问者,我将使用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