首页 > 解决方案 > 如果特定学习者在特定任务上失败,如何使基准函数不失败?

问题描述

我需要在基准实验中比较各种学习者的多项任务(> 100 000 个气象站的每小时温度记录)。

因为我的一个学习者有时可能会失败(这是可以接受的)我需要一个解决方案(我猜是trycatch()or purrr::possibly())以便 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 值。

我已经成功地实现了我想要的函数mlr::resample()传递给purrr::map()它在每个学习者上迭代的地方,但是我没有所有 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一些自定义代码来处理其结果?

预先感谢您的支持

标签: rmlr

解决方案


您可以设置 on.learner.error mlr 包选项,请参阅https://mlr.mlr-org.com/reference/configureMlr.html#arguments


推荐阅读