mlr3::autoplot() 的 Roc 曲线用于 "holdout" 重采样的基准
Roc curves with mlr3::autoplot() for benchmark with "holdout" resampling
我正在使用 mlr3 包,我想绘制不同模型的 ROC 曲线。如果我按照 documentation 中的解释使用交叉验证,它工作得很好,但如果我使用“holdout”进行重采样,那么我会收到错误 Error: Invalid show_cb. Inconsistent with calc_avg of evalmod.
.
代码如下:
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
在 precrec::evalmod()
中默认设置为 TRUE
,并且该函数在 mlr3viz::autoplot()
中按原样使用。由于 as_precrec()
returns 一个没有不同 dsid 的对象(在 cross-validation 的情况下,不同的值来自不同的折叠,如果没有保留,则只有一个元素),因此 [=16 不可能进行平均=] 因此错误(虽然理论上它可以)。
这是一段代码,可用于绘制带保留(或任何其他类型的重采样)的 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 包,我想绘制不同模型的 ROC 曲线。如果我按照 documentation 中的解释使用交叉验证,它工作得很好,但如果我使用“holdout”进行重采样,那么我会收到错误 Error: Invalid show_cb. Inconsistent with calc_avg of evalmod.
.
代码如下:
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
在 precrec::evalmod()
中默认设置为 TRUE
,并且该函数在 mlr3viz::autoplot()
中按原样使用。由于 as_precrec()
returns 一个没有不同 dsid 的对象(在 cross-validation 的情况下,不同的值来自不同的折叠,如果没有保留,则只有一个元素),因此 [=16 不可能进行平均=] 因此错误(虽然理论上它可以)。
这是一段代码,可用于绘制带保留(或任何其他类型的重采样)的 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()
.