1

很清楚 Hand 和 Till 方法在多变量情况下是如何工作的(根据类概率),我已经对照我编写的一些代码检查了这一点。即我使用了一个 3 类问题,我得到了与 pROC 相同的结果。当我将 3 类问题转换为 2 类问题(通过合并 2 个类)时,我得到与 pROC 相同的结果(仍然使用 multiclass.roc)。但是,当我通过 multiclass.roc 响应具有 3 个类、3 个级别但只有一个类概率向量时,我得到了另一个结果。

我知道这是不同的处理方式;https://rdrr.io/cran/pROC/man/multiclass.html说“multiclass.roc 函数可以处理两种类型的数据集:单变量和多变量。在单变量的情况下,传递单个预测向量并评估所有响应组合。”。但是,我无法找到关于这里发生的事情的解释。显然,这与响应中的类数量有关(因为这是唯一的其他数据),但我很想知道在这种情况下 pROC 正在做什么。

这是我的结果(我写了 AUC_mc):

pROC:3 类单变量:0.8494,3 类与其他类(2 类):0.9118
AUC_mc:3 类与其他类(2 类):0.9118

pROC:1 类单变量:0.9721,1 类与其余(2 类):
0.9693 AUC_mc:1 类与其余(2 类):0.9692823

#
# Here the probabilities for only 1 class are passed to pROC.   
# When there are 2 classes in the domain that's fine  
# When there are 3 classes in the domain then I get a different result
#
roc = multiclass.roc(test.df$response, probabilities[,n], levels=levels(test.df$response))

pROC:3 级:0.9568
AUC_mc:3 级:0.9567698

roc = multiclass.roc(test.df$response, probabilities[,], levels=levels(test.df$response))

非常感谢

4

1 回答 1

0

在单变量情况下,pROC 测试所有 1 对 1 比较。其余的比较没有 1。因此,对于 3 个类,您有 3 条 roc 曲线:1 对 2;1对3;和 2 对 3。

您可以在 multiclass.R 中找到源代码

rocs <- utils::combn(levels, 2, function(X, response, predictor, percent, ...) {
    roc(response, predictor, levels=X, percent=percent, auc=FALSE, ci=FALSE, ...)
[...]

utils::combn函数一次生成所有元素的组合levels2

我将尝试改进文档以更好地反映这一点。

于 2019-07-17T14:13:29.330 回答