R中的3级AUC计算(pROC包)

时间:2013-12-11 19:00:03

标签: r machine-learning classification roc auc

我在R中遇到了3级ROC分析的问题并且获得了非常烦人的结果(参见 here )。 现在我尝试用不同的方法来解决它。数据为iris,分类器为nnet包中的多项逻辑回归。代码如下:

# iris data (3-class ROC)
library(nnet)
library(pROC) # should be installed first: install.packages('pROC')
data(iris)
# 3-class logistic regression
model = multinom(Species~., data = iris, trace = F)
# confusion matrix (z1) & accuracy (E1)
z1 = table(iris[, 5], predict(model, data = iris))
E1 = sum(diag(z1)) / sum(z1)
z1;E1
#             setosa versicolor virginica
#  setosa         50          0         0
#  versicolor      0         49         1
#  virginica       0          1        49
#[1] 0.9866667

# prediction model (still training data set)
pre = predict(model, data = iris, type='probs')
# AUC measure
modelroc = mean(
    c(as.numeric(multiclass.roc(iris$Species, pre[,1])$auc),
        as.numeric(multiclass.roc(iris$Species, pre[,2])$auc),
        as.numeric(multiclass.roc(iris$Species, pre[,3])$auc)
    )
)
modelroc
## RESULT ##
# [1] 0.9803556

我的问题是:这是使用pROC套餐的正确方法吗?
非常感谢!!!

一些相关的参考文献:
pROC包裹:http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc
Hand & Till(2001)原始论文:http://link.springer.com/article/10.1023%2FA%3A1010920819831

2 个答案:

答案 0 :(得分:1)

您正在采用三个多类AUC的平均值,它们本身是三条ROC曲线的AUC的平均值。所以这就是9 AUC的意思。这可能是也可能不是您问题的正确答案,具体取决于您的实际问题,但正如您从未问过的那样,这很难回答。我只能说,它不是 Hand&你提到的Till(2001)论文。

答案 1 :(得分:1)

我理解这个问题比较陈旧,但我有一个解决方案:

# Starting validation code
library(HandTill2001)

auc(multcap(
  response = iris$Species,
  predicted = as.matrix(pre)
))

不幸的是,这给了我一个0.9990667的AUC,因为我没有使用pROC包,所以不支持绘图。但我也不确定应该如何使用包装pROC。