2013-12-11 36 views
2

我遇到了R中3級ROC分析的問題,並且獲得了非常令人討厭的結果(請參閱here)。 現在我嘗試用不同的方式來解決它。數據爲iris,分類器爲nnet包中的多項邏輯迴歸。代碼如下:R(pROC包)中的3級AUC計算

# 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

回答

1

您正在服用三AUC多類,它們本身是三個ROC曲線的AUC的均值的平均值。所以這就是9 AUC的意思。這可能會也可能不是您問題的正確答案,具體取決於您的實際問題,但是您從未問過這個問題,因此很難回答。我只能說,這不是您提到的論文中描述的內容。

1

我理解這個問題是比較老了,但我有一個解決方案:

# Starting validation code 
library(HandTill2001) 

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

這讓我的0.9990667的AUC,不幸的是,因爲我沒有使用PROC包,是不是真的支持繪圖。但我也不確定應如何使用套件pROC。