2

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

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

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

下面是一个简单的例子:

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

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

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

4

2 回答 2

2

此外,您可能希望查看Fawcett, 2006以获得理解和实施 ROC 图的非常好的指南。他还谈到了多类 ROC 和 AUC,并指出了其他资源。

于 2012-08-02T16:31:53.370 回答
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
于 2020-12-14T11:24:21.433 回答