Реализация loo_cv из rsample в tidymodels - PullRequest
1 голос
/ 11 июля 2020

Я новичок в синтаксисе tidymodels и хотел бы реализовать перекрестную проверку исключения одного исключения с использованием loo_cv из rsample в структуре tidymodel. Однако реализация кажется отличной от 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

Ответы [ 2 ]

1 голос
/ 20 июля 2020

Мы действительно не поддерживаем LOO в tidymodels. Это довольно устаревший метод, и вам лучше использовать bootstrap или несколько повторений 10-кратного CV.

Мы можем работать с ним в будущем, но с точки зрения поддержки накладные расходы этого метода довольно высоки (так как он ведет себя иначе, чем все другие методы). Мы бы предпочли пока потратить время на другие недостающие функции.

0 голосов
/ 11 июля 2020

Следующий код работает, но я не думаю, что он действительно отражает эффективность или полезность подхода 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)
...