r - 如何处理R(pROC程序包)中的多类ROC分析?

标签 r data-mining random-forest roc proc-r-package

例如,当我在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。

另外三条评论:
  • 我说将因子转换为数字没有意义,因为如果分类不理想并且对级别进行重新排序,则会得到不同的结果。这就是为什么在pROC中它不会自动完成的原因:您必须在设置中考虑它。
  • 通常,这种多类平均实际上没有任何意义,您最好从二进制分类的角度重新考虑您的问题。 pROC
  • 中还没有实现更高级的多类方法(具有ROC曲面等)。
  • 正如@cbeleites所说,用训练数据(替换)评估模型是不正确的,因此在一个实际示例中,您必须保留测试集或使用交叉验证。
  • 关于r - 如何处理R(pROC程序包)中的多类ROC分析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518376/

    相关文章:

    r - 如何在 R 中使用 qgamma

    RTVS 看不到我的常规 R,并告诉我使用 Microsoft R Client

    r - 如何在R中找到向量中连续数字的范围

    machine-learning - Weka的SimpleLogistic函数是否使用正则化?

    r - 使用 R 中 randomForest 包中的 rfimpute 时出现内存错误

    r - R按data.table中的条件分组

    python - 特征缩放(标准化)以及 LabelEncode 和 OneHotEncode 数据的最佳实践是什么

    data-mining - 类似Netflix的比赛

    python - 为什么模型的准确率高达 84%,但 AUC 却非常低(13%)?

    R:强制引入的 Kaggle Titanic 数据集随机森林 NA