如果特定学习者在特定任务上失败,如何使基准测试功能不失败?

时间:2019-04-10 09:14:19

标签: r mlr

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

因为我的一个学习者有时可能会失败(这是可以接受的),所以我需要一个解决方案(我猜是用trycatch()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便捷函数{{ 1}},稍后可能需要执行一些基准测试后分析,例如合并基准测试结果:

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一起使用,并做一些自定义代码来处理其结果?

预先感谢您的支持

1 个答案:

答案 0 :(得分:2)

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