rf-finalize2

tidymodels
statlearning
template
string
Published

May 17, 2023

Aufgabe

Berechnen Sie ein prädiktives Modell (Random Forest) mit dieser Modellgleichung:

body_mass_g ~ . (Datensatz: palmerpenguins::penguins).

Zeigen Sie, welche Werte für mtry im Default von Tidymodels gesetzt werden!

Hinweise: - Tunen Sie mtry - Verwenden Sie Kreuzvalidierung - Verwenden Sie Standardwerte, wo nicht anders angegeben. - Fixieren Sie Zufallszahlen auf den Startwert 42.











Lösung

Zuererst der Standardablauf:

# Setup:
library(tidymodels)
library(tidyverse)
library(tictoc)  # Zeitmessung


# Data:
d_path <- "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv"
d <- read_csv(d_path)

# rm NA in the dependent variable:
d <- d %>% 
  drop_na(body_mass_g)


set.seed(42)
d_split <- initial_split(d)
d_train <- training(d_split)
d_test <- testing(d_split)


# model:
mod_rf <-
  rand_forest(mode = "regression",
           mtry = tune())


# cv:
set.seed(42)
rsmpl <- vfold_cv(d_train)


# recipe:
rec_plain <- 
  recipe(body_mass_g ~  ., data = d_train) %>% 
  step_impute_bag(all_predictors())


# workflow:
wf1 <-
  workflow() %>% 
  add_model(mod_rf) %>% 
  add_recipe(rec_plain)


# tuning:
tic()
wf1_fit <-
  wf1 %>% 
  tune_grid(
    resamples = rsmpl)
toc()
26.129 sec elapsed

Dann schauen wir uns das Ergebnisobjekt vom Tuning an.

wf1_fit %>% 
  collect_metrics() %>% 
  filter(.metric == "rmse") %>% 
  arrange(mtry)
mtry .metric .estimator mean n std_err .config
1 rmse standard 311.1338 10 13.561765 pre0_mod1_post0
2 rmse standard 282.0886 10 11.401888 pre0_mod2_post0
3 rmse standard 280.8153 10 11.206073 pre0_mod3_post0
4 rmse standard 284.6346 10 10.374466 pre0_mod4_post0
5 rmse standard 284.6638 10 10.446736 pre0_mod5_post0
6 rmse standard 283.1617 10 9.830670 pre0_mod6_post0
7 rmse standard 283.2110 10 9.983912 pre0_mod7_post0
8 rmse standard 283.1983 10 10.600386 pre0_mod8_post0

In der Hilfe ist zu lesen:

If no tuning grid is provided, a semi-random grid (via dials::grid_latin_hypercube()) is created with 10 candidate parameter combinations.

Aus irgendwelchen Gründen wurden hier nur 10 Kandidatenwerte berechnet.

Weiter steht dort:

In some cases, the tuning parameter values depend on the dimensions of the data. For example, mtry in random forest models depends on the number of predictors. In this case, the default tuning parameter object requires an upper range. dials::finalize() can be used to derive the data-dependent parameters. Otherwise, a parameter set can be created (via dials::parameters()) and the dials update() function can be used to change the values. This updated parameter set can be passed to the function via the param_info argument.

Achtung: step_impute_knn scheint Probleme zu haben, wenn es Charakter-Variablen gibt.


Categories:

  • tidymodels
  • statlearning
  • template
  • string