带有 mlr3::autoplot() 的 Roc 曲线用于 "holdout"重采样的基准

标签 r mlr3

我正在使用 mlr3 包,我想绘制不同模型的 ROC 曲线。如果我按照 documentation 中的说明使用交叉验证它工作得很好,但是如果我使用“holdout”进行重采样,那么我会得到一个错误 Error: Invalid show_cb。与 evalmod 的 calc_avg 不一致。.

代码如下:

library("mlr3")
library("mlr3learners")
library("mlr3viz")

# one task only
tasks = lapply(c("german_credit"), tsk)

# get some learners and for all learners ...
# * predict probabilities
# * predict also on the training set
learners = c("classif.featureless", "classif.rpart", "classif.ranger", "classif.kknn")
learners = lapply(learners, lrn,
                  predict_type = "prob")

# compare via 3-fold cross validation
resamplings = rsmp("holdout", ratio = .8) # holdout instead of cv

# create a BenchmarkDesign object
design = benchmark_grid(tasks, learners, resamplings)
print(design)

bmr = benchmark(design)
autoplot(bmr, type = "roc")

感谢您的帮助, 马修

最佳答案

如果其他人遇到同样的问题,这里有一个解决方案。出现问题是因为参数 calc_avg设置为 TRUE默认为 precrec::evalmod()并且函数按原样在 mlr3viz::autoplot() 中使用.自 as_precrec()返回一个没有不同 dsid 的对象(在交叉验证的情况下,不同的值来自不同的折叠,而 holdout 只有一个元素)然后 precrec 的平均值是不可能的因此错误(尽管理论上它可以)。

这是一段代码,可用于绘制带保留(或任何其他类型的重采样)的 ROC 曲线。使用答案中的代码,我们可以执行以下操作:

roc_data <- evalmod(as_precrec(bmr), mode = "rocprc", calc_avg = FALSE)  %>% # setting calc_avg to FALSE is critical
  fortify() %>% # precrec objects have a fortify generic function
  .[.$curvetype == "ROC", ] # both roc and prc are returned

# Tracer les courbes
ggplot(
  data = roc_data,
  mapping = aes(x = x, y = y, color = modname)
) +
  geom_line()

此代码还具有成为 ggplot 的优点对象,以便可以使用 ggplot2 轻松修改它precrec::autoplot() 不是这种情况.

关于带有 mlr3::autoplot() 的 Roc 曲线用于 "holdout"重采样的基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64424267/

相关文章:

cross-validation - mlr3 中的留一法交叉验证

mlr3 - 使用 #mlr3 查找 XGBoost 超参数时的 Term_evals

r - 如何使用索引字符串从 R 中的数据帧或矩阵中提取行

r - Rcpp 中如何使用 noNA?

r - 向数据表添加多个新列

python - r 网状 : rename duplicates from converted Python pandas dataframe

r - 为什么这些实线出现在我在 ggplot 中的绘图下方?

r - 来自合奏的 MLR3 平均分数

dependencies - MLR3 在学习者分支/依赖项中使用 trafo(转换)在转置时遇到 "non-numeric argument"错误