Как исправить эту ошибку: не удается загрузить рецепты в Caret :: Train? - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть эта проблема, когда загружаю рецепты в каретку: train

Что-то не так с вменением NA, но я не знаю, как это исправить. Если удалить перекрестную проверку, все будет работать нормально.

Заранее спасибо,

data(airquality)
set.seed(33) # for reproducibility
air_split <- initial_split(airquality, prop = 0.7) 
air_train <- training(air_split)
air_test <- testing(air_split)

# Feature engineering - final recipe
air_recipe <- recipe(Ozone ~ ., data = air_train) %>% 
  step_zv(all_predictors()) %>% 
  step_nzv(all_predictors()) %>% 
  step_knnimpute(all_numeric(), neighbors = 6) %>% 
  step_log(Ozone, Wind) %>%
  step_other(Day, threshold = 0.01, other = "other") %>%
  step_dummy(all_nominal(), -all_outcomes())


# Validation
cv5 <- trainControl( method = "repeatedcv", 
                     number = 5,
                     repeats = 5, allowParallel = TRUE)

# Fit an lm model
set.seed(12) 
lm_fit <- train(
  air_recipe,
  data = air_train, 
  method = "lm", 
  trControl = cv5, 
  metric = "RMSE")

Сообщение об ошибке

Ошибка в квантиле. по умолчанию (y, probs = seq (0, 1, length = cuts)): пропущенные значения и NaN недопустимы, если «na.rm» имеет значение FALSE

R.version _
платформа x86_64-apple-darwin15.6.0
arch x86_64
os darwin15.6.0
система x86_64, darwin15.6.0
статус
мажор 3
минор 6.1
год 2019
месяц 07
день 05
svn rev 76782
язык R
version.string R версия 3.6.1 (2019-07-05) псевдоним Действие пальцев

1 Ответ

1 голос
/ 05 апреля 2020

Похоже, что сэмплы сделаны до применения рецепта .

Так что вы могли бы prep и juice recipe и использовать метод формулы:

library(recipes)
library(caret)
library(rsample)

data(airquality)
set.seed(33) # for reproducibility
air_split <- initial_split(airquality, prop = 0.7) 
air_train <- training(air_split)
air_test <- testing(air_split)

# Feature engineering - final recipe
air_recipe <- recipe(Ozone ~ ., data = air_train) %>% 
  step_zv(all_predictors()) %>% 
  step_nzv(all_predictors()) %>% 
  step_knnimpute(all_numeric(), neighbors = 6) %>% 
  step_log(Ozone, Wind) %>%
  step_other(Day, threshold = 0.01, other = "other") %>%
  step_dummy(all_nominal(), -all_outcomes()) %>% 
  step_naomit(all_outcomes(),all_predictors())

# Prep recipe
air_prep <- prep(air_recipe, retain = TRUE)

# Juice the prepared recipe 
air_train <- juice(air_prep)

# Validation
cv5 <- trainControl( method = "repeatedcv", 
                     number = 5,
                     repeats = 5, allowParallel = TRUE)


# Fit an lm model
set.seed(12) 
lm_fit <- train(
  Ozone ~ .,
  data = air_train, 
  method = "lm", 
  trControl = cv5, 
  metric = "RMSE")

lm_fit
#> Linear Regression 
#> 
#> 108 samples
#>   5 predictor
#> 
#> No pre-processing
#> Resampling: Cross-Validated (5 fold, repeated 5 times) 
#> Summary of sample sizes: 86, 88, 86, 86, 86, 86, ... 
#> Resampling results:
#> 
#>   RMSE       Rsquared   MAE      
#>   0.5091496  0.6568485  0.3793589
#> 
#> Tuning parameter 'intercept' was held constant at a value of TRUE

Кроме того, вы можете использовать {parsnip} и {tune}, чтобы сохранить все в идиоме tidymodels:

library(recipes)
library(rsample)
library(parsnip)
library(tune)
library(yardstick)

data(airquality)
set.seed(33) # for reproducibility
air_split <- initial_split(airquality, prop = 0.7) 
air_train <- training(air_split)
air_test <- testing(air_split)

air_recipe <- recipe(Ozone ~ ., data = air_train) %>% 
  step_zv(all_predictors()) %>% 
  step_nzv(all_predictors()) %>% 
  step_knnimpute(all_numeric(), neighbors = 6) %>% 
  step_log(Ozone, Wind) %>%
  step_other(Day, threshold = 0.01, other = "other") %>%
  step_dummy(all_nominal(), -all_outcomes()) %>% 
  step_naomit(all_outcomes(),all_predictors())

air_cv <- vfold_cv(air_train, v = 5, repeats = 5)

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

lm_fits <- fit_resamples(air_recipe, lm_mod, air_cv)

show_best(lm_fits, metric = "rmse", maximize = FALSE)
#> # A tibble: 1 x 5
#>   .metric .estimator  mean     n std_err
#>   <chr>   <chr>      <dbl> <int>   <dbl>
#> 1 rmse    standard   0.526    25  0.0256

Создано в 2020-04-05 представляет пакет (v0.3.0)

...