我需要在基准实验中比较不同学习器的多项任务(来自气象站的超过 100 000 条每小时温度记录)。
因为我的一个学习者有时可能会失败(这是可以接受的),我需要一个解决方案(我猜用 trycatch()
或 purrr::possible()
)这样,mlr 对于失败的任务的相关学习者返回 NULL,而不是整个基准测试的错误。
这将使我稍后能够了解它在哪些情况下会失败
到目前为止我已经实现了这一点:
bmrs = tasks %>%
purrr::map(possibly(~mlr::benchmark(.,
learners = my_learners,
resamplings = mlr::makeResampleDesc("LOO"),
measures = rmse,
keep.pred = TRUE,
models = FALSE), NULL))
请注意,我将函数 mlr::benchamrk()
映射到每个任务,而不是一次传递所有任务。这正是因为我的目标是当特定学习者在特定任务上失败并引发错误时获得 NULL 值。但这样做将为我的学习者当前任务的整个基准返回 NULL 值,而不是仅为受影响的学习者返回 NULL。
我已经成功地通过传递给 purrr::map()
的函数 mlr::resample()
实现了我想要的目标,该函数在每个函数上进行迭代但我没有所有 bmr 方便的函数 mlr::getBMR...()
,稍后我可能需要这些函数来执行一些基准测试后分析,例如合并基准测试结果:
resample_by_task = function(t) {
learners %>% purrr::map(possibly(
~ mlr::resample(.,
task = t,
resampling = mlr::makeResampleDesc("LOO"),
measures = rmse,
keep.pred = TRUE,
models = models), NULL))}
bmrs = purrr::map(tasks, ~resample_by_task(.))
那么,您是否建议我使用由自定义错误捕获系统包装的 mlr::benchmark
函数,或者使用 mlr::resample
进行操作一些自定义代码来处理其结果?
提前感谢您的支持
最佳答案
您可以设置 on.learner.error mlr 包选项,请参阅 https://mlr.mlr-org.com/reference/configureMlr.html#arguments .
关于r - 如果特定学习者在特定任务上失败,如何使基准函数不会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55608882/