3

我是 tidymodels 语法的新手,想loo_cv在 tidymodel 框架中使用 from rsample 实现遗漏交叉验证。但是,实现似乎不同于vfold_cv,我找不到任何有用的实现loo_cv. 是的,我查看了帮助页面的示例

我想从fit_resamples()帮助页面模拟如下所示的类似类型的工作流,但我找不到类似的loo_cv. 修改下面的代码loo_cv通知我fit_resamples不支持loo_cv但我不知道什么支持它。我认为正确的解决方案将涉及fit_split(),但我也无法让它发挥作用。尽管我认为解决方案将非常简单,但我一直在谷歌搜索并生成错误消息几个小时。提前感谢您的任何指导!

folds <- vfold_cv(mtcars, v = 5)
#folds <- loo_cv(mtcars) # generates error message with fit_resamples()
spline_rec <- recipe(mpg ~ ., data = mtcars) %>%
step_ns(disp) %>%
step_ns(wt)

lin_mod <- linear_reg() %>%
set_engine("lm")

control <- control_resamples(save_pred = TRUE)

spline_res <- fit_resamples(lin_mod, spline_rec, folds, control = control)

spline_res %>% 
collect_predictions
4

2 回答 2

2

我们并不真正支持 tidymodels 中的 LOO。这是一种相当不推荐使用的方法,您最好使用引导程序或多次重复 10 倍 CV。

我们将来可能会使用它,但从支持的角度来看,该方法的开销相当高(因为它的行为与所有其他方法不同)。我们现在宁愿花时间在其他缺失的功能上。

于 2020-07-20T16:30:15.630 回答
0

以下代码有效,但我认为它并没有真正捕捉到 tidymodels 方法的效率或实用性。仍然会喜欢更好的建议。

loocvdat <- loo_cv(mtcars)

lm_spec <- linear_reg() %>% 
set_engine("lm")

splitfun <- function(mysplit){
  fit_split(mpg~.,
        model=lm_spec,
        split=mysplit) %>% 
  collect_predictions}

map(loocvdat$splits,splitfun)
于 2020-07-11T18:13:05.107 回答