library(tidymodels)
library(tidyverse)
library(tictoc) # Rechenzeit messen, optional
# data(penguins, package = "palmerpenguins")
d_path <- "https://vincentarelbundock.github.io/Rdatasets/csv/modeldata/penguins.csv"
d <- read_csv(d_path)tidymodels-penguins07
tidymodels
statlearning
trees
schoice
Aufgabe
Berechnen Sie ein Entscheidungsbaum-Modell mit tidymodels und zwar anhand des penguins Datensatzes.
Modellgleichung: body_mass_g ~ bill_length_mm.
Berichten Sie die RMSE!
Hinweise:
- Tuning Sie \(Cp\) mit 20 verschiedenen den Werten.
- Löschen Sie alle Zeilen mit fehlenden Werten in den Prädiktoren.
- Beachten Sie die üblichen Hinweise.
- Natürlich gilt: Ceteris paribus. Halten Sie also die Modelle im Übrigen vergleichbar bzw. identisch.
Lösung
Setup
Wir dürfen keine fehlenden Werte in der Y-Variable haben (im Train-Set), sonst meckert Tidymodels:
d2 <-
d %>%
drop_na(body_mass_g)CV
Daten aufteilen:
set.seed(42)
d_split <- initial_split(d2)
d_train <- training(d_split)
d_test <- testing(d_split)CV
set.seed(42)
folds <- vfold_cv(d_train, v = 10)Workflow
rec1 <-
recipe(body_mass_g ~ bill_length_mm, data = d_train) %>%
step_naomit(all_numeric_predictors())
mod_tree <-
decision_tree(
mode = "regression",
cost_complexity = tune()
)
wflow <-
workflow() %>%
add_recipe(rec1) %>%
add_model(mod_tree)Fitten
tic()
wflow_fit <-
tune_grid(
wflow,
resamples = folds,
control = control_grid(save_workflow = TRUE),
grid = 20,
metrics = metric_set(rmse)
)
toc()14.665 sec elapsed
Modellgüte
bestfit1 <- fit_best(x = wflow_fit)
lastfit1 <- last_fit(bestfit1, d_split)Error in `last_fit()`:
! `last_fit()` is not well-defined for a fitted workflow.
collect_metrics(lastfit1)Error: object 'lastfit1' not found
Categories:
- tidymodels
- statlearning
- trees
- schoice