例如,当我在R(pROC软件包)中使用multiclass.roc函数时,我通过随机森林训练了一个数据集,这是我的代码:
# randomForest & pROC packages should be installed:
# install.packages(c('randomForest', 'pROC'))
data(iris)
library(randomForest)
library(pROC)
set.seed(1000)
# 3-class in response variable
rf = randomForest(Species~., data = iris, ntree = 100)
# predict(.., type = 'prob') returns a probability matrix
multiclass.roc(iris$Species, predict(rf, iris, type = 'prob'))
结果是:
Call:
multiclass.roc.default(response = iris$Species, predictor = predict(rf,
iris, type = "prob"))
Data: predict(rf, iris, type = "prob") with 3 levels of iris$Species: setosa,
versicolor, virginica.
Multi-class area under the curve: 0.5142
这是正确的吗?谢谢!!!
“pROC”引用:http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc
最佳答案
如您在引用文献中所看到的,multiclass.roc需要一个“数值向量(...)”,并且从那里链接的roc
文档(由于某种原因不在您提供的链接中)进一步说“长度相同”。比response
”。您正在传递一个3列的数字矩阵,这显然是错误的,并且自pROC 1.6以来不再受支持。我不知道它以前在做什么,可能不知道您在期待什么。
这意味着您必须在一个数字模式的单个原子向量中汇总您的预测。对于您的模型,您可以使用以下内容,尽管将因子转换为数字通常并没有多大意义:
predictions <- as.numeric(predict(rf, iris, type = 'response'))
multiclass.roc(iris$Species, predictions)
这段代码真正要做的是在您的预测上计算3条ROC曲线(一条用setosa vs. versicolor,一条使用versicolor vs. virginica,一条使用setosa vs. virginica)并平均其AUC。
另外三条评论:
关于r - 如何处理R(pROC程序包)中的多类ROC分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518376/