2

我在 R 中遇到了一个 3 类 ROC 分析的问题,得到了一个非常烦人的结果(见这里)。现在我尝试使用不同的方法来解决它。数据是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

4

2 回答 2

2

我知道这个问题比较老,但我有一个解决方案:

# Starting validation code
library(HandTill2001)

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

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

于 2016-01-08T19:15:53.097 回答
1

您正在取三个多类 AUC 的平均值,它们本身就是三个 ROC 曲线的 AUC 的平均值。这就是 9 AUC 的平均值。这可能是也可能不是您问题的正确答案,具体取决于您的实际问题,但由于您从未问过,因此很难回答。我只能说,这不是您提到的Hand & Till (2001)论文中描述的内容。

于 2013-12-29T10:16:40.107 回答