【问题标题】:Plot ROC curve with pROC R用 pROC R 绘制 ROC 曲线
【发布时间】:2017-04-28 17:05:14
【问题描述】:

我使用 randomForest 构建了一个文本分类器,因此为了评估它,我尝试使用 pROC 包创建 ROC 曲线。

这里是代码:

ndsi.forest <- randomForest(tf.idf[train.index, ], as.factor(train$Note.Reco[train.index]), ntree = 100)

#predict with test data
ndsi.pred <-predict(ndsi.forest, newdata = tf.idf[test.index, ], response  = 'class')
pred <- data.frame(ndsi.pred)
result <- data.frame(id = Data_clean$id[test.index], sentiment = pred[ , ])

##"ROC curve"
multiclass.roc(result$sentiment, test$Note.Reco)

我想知道这是否是一种创建情节的方法?使用 pROC 包的 ROC 图?

我尝试使用此代码:

roc(test$Note.Reco, result$sentiment, levels = c(1,2,3,4,5,6,7,8,9,10))

但我收到此错误:

Error in roc.default(test$Note.Reco, result$sentiment, levels = c(1, 2,  : 
  'levels' argument must have length 2

提前谢谢你

【问题讨论】:

  • 你用过plot.roc功能吗? cran.r-project.org/web/packages/pROC/pROC.pdf
  • 要表示roc 曲线,您需要两个向量:第一个是指响应变量(一个具有两个水平的因子),第二个是一个连续变量,表示每个变量的预测值样本。此外,您可以指定哪些是您的第一个参数的标签。它们只有两个,因为第一个输入是一个二分因子。那么,test$Note.Reco 长什么样子?
  • 啊好的,我的响应变量是一个从0到10的值的向量,在这种情况下我该怎么办? ://
  • 我有result$sentiment : Factor of 11 levels "0,1,..10"test$Note.Reco : int 6 3 6 7 8 10 0 1 2 这种情况我该怎么办?谢谢

标签: r plot roc


【解决方案1】:

据我了解,您有一个多类响应变量(对应于 10 个不同的组)。

ROC - 曲线是为两组的分类定义的,所以 multiclass 的作用是计算“一个组与其他组”的分类。 multiclass.roc 函数不允许您表示曲线,但了解它的作用后,您可以:

1) 考虑与您拥有的组一样多的 roc 曲线。即ROC-曲线分类:

  • 第 1 组与非第 1 组
  • 第 2 组与非第 2 组
  • 。 . .
  • 第 10 组与非第 10 组

您可以使用roc 函数来做到这一点。您唯一需要的是将响应向量重新定义为属于第 i 组的个人为 1,为其余个人重新定义为 0。用不同的名称保存每个 roc 对象。

2) 要表示所有曲线,只需对每条曲线使用plot 函数,将plot(..., add=T) 添加到除第一条之外的所有曲线。

【讨论】:

  • 不太正确。 pROC 中的多类测试每个可能的组对:1 对 2; 1对3; 1对4; ... 9 vs 10。实际上还有更多 ROC 曲线。
  • 因此,您需要获得 90 条曲线,为此您需要使个体的子集包含每对响应中的一个(我们称它们为 ij
猜你喜欢
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
  • 2016-02-04
  • 1970-01-01
  • 2020-08-15
  • 2019-02-05
相关资源
最近更新 更多