r语言 - 带有 mlr3::autoplot() 的 Roc 曲线,用于"holdout"重采样的基准测试



我使用的是mlr3软件包,我想为不同的模型绘制ROC曲线。如果我使用文档中解释的交叉验证,它工作得非常好,但如果我使用";拒不让步;对于重新采样,则我得到错误CCD_ 1。

这是代码:

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")

谢谢你的帮助,Mathieu

如果其他人也有同样的问题,这里有一个解决方案。出现此问题是因为参数calc_avgprecrec::evalmod()中默认设置为TRUE,而函数在mlr3viz::autoplot()中按原样使用。由于as_precrec()返回的对象没有不同的dsid(在交叉验证的情况下,不同的值来自不同的折叠,而保持只有一个元素(,因此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轻松地对其进行修改,而Error: Invalid show_cb. Inconsistent with calc_avg of evalmod.0的情况并非如此。

最新更新