library(tidymodels)
library(tictoc)
# Data:
<- "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv"
d_path <- read.csv(d_path) d
tidymodels-error1introd
tidymodels
statlearning
error
na
string
Aufgabe
Die folgende Pipeline hat einen Fehler. Welcher ist das?
set.seed(42)
<- initial_split(d)
d_split <- training(d_split)
d_train <- testing(d_split)
d_test
# model:
<-
mod1 rand_forest(mode = "regression")
# cv:
set.seed(42)
<- vfold_cv(d_train)
rsmpl
# recipe:
<- recipe(body_mass_g ~ ., data = d_train) |>
rec1 #step_unknown(all_nominal_predictors(), new_level = "NA") |>
#step_novel(all_nominal_predictors()) |>
step_naomit(all_predictors()) |>
step_dummy(all_nominal_predictors()) |>
step_nzv(all_predictors()) |>
step_normalize(all_predictors())
# workflow:
<-
wf1 workflow() %>%
add_model(mod1) %>%
add_recipe(rec1)
# fitting:
tic()
<-
wf1_fit %>%
wf1 fit(data = d_train)
toc()
<- predict(wf1_fit, new_data = d_test) preds
Als Check: Das gepreppte/bebackene Rezept:
<- prep(rec1)
rec1_prepped <- bake(rec1_prepped, new_data = NULL) d_train_baked
|>
d_train_baked head()
|>
d_train_baked map_int(~ sum(is.na(.)))
Lösung
Der Fehler liegt darin, dass das Rezept keine Änderungen an der AV ausführt. In der AV gibt es aber fehlende Werte (NA
) im Test-Set.
colSums(is.na(d_test))
Einen fehlenden Wert, um genau zu sein. Dieser eine fehlende Wert versalzt uns die Suppe:
<-
d_test_nona |>
d_test na.omit()
Und schon geht’s.
<- predict(wf1_fit, new_data = d_test_nona)
preds |>
preds head()
Dieser SO-Post handelt von einem vergleichbarem Problem.
Categories:
- tidymodels
- statlearning
- error
- NA
- string