library(tidymodels)
tidymodels-tree1
statlearning
trees
tidymodels
string
mtcars
Aufgabe
Berechnen Sie folgende prädiktiven Modelle und vergleichen Sie die Modellgüte:
- Entscheidungsbaum
- Bagging (Bootstrap-Bäume)
Modellformel: am ~ .
(Datensatz mtcars
)
Berichten Sie die Modellgüte (ROC-AUC).
Hinweise:
- Tunen Sie alle Parameter (die der Engine anbietet).
- Verwenden Sie Defaults, wo nicht anders angegeben.
- Führen Sie eine \(v=2\)-fache Kreuzvalidierung durch (weil die Stichprobe so klein ist).
- Beachten Sie die üblichen Hinweise.
Lösung
Setup
library(tidymodels)
data(mtcars)
library(tictoc) # Zeitmessung
library(baguette)
Für Klassifikation verlangt Tidymodels eine nominale AV, keine numerische:
<-
mtcars %>%
mtcars mutate(am = factor(am))
Daten teilen
<- initial_split(mtcars)
d_split <- training(d_split)
d_train <- testing(d_split) d_test
Modell(e)
<-
mod_tree decision_tree(mode = "classification",
cost_complexity = tune(),
tree_depth = tune(),
min_n = tune())
<-
mod_bag bag_tree(mode = "classification",
cost_complexity = tune(),
tree_depth = tune(),
min_n = tune())
Rezept(e)
<-
rec_plain recipe(am ~ ., data = d_train)
Resampling
<- vfold_cv(d_train, v = 2) rsmpl
Workflows
<-
wf_tree workflow() %>%
add_recipe(rec_plain) %>%
add_model(mod_tree)
<-
wf_bag workflow() %>%
add_recipe(rec_plain) %>%
add_model(mod_bag)
Tuning/Fitting
Tuninggrid:
<- grid_regular(extract_parameter_set_dials(mod_tree), levels = 5)
tune_grid tune_grid
Da beide Modelle die gleichen Tuningparameter aufweisen, brauchen wir nur ein Grid zu erstellen.
tic()
<-
fit_tree tune_grid(object = wf_tree,
grid = tune_grid,
metrics = metric_set(roc_auc),
resamples = rsmpl)
toc()
fit_tree
tic()
<-
fit_bag tune_grid(object = wf_bag,
grid = tune_grid,
metrics = metric_set(roc_auc),
resamples = rsmpl)
toc()
Bester Kandidat
show_best(fit_tree)
show_best(fit_bag)
Bagging erzielte eine klar bessere Modellgüte (in den Validierungssamples) als das Entscheidungsbaum-Modell.
Finalisieren
<-
wf_best_finalized %>%
wf_bag finalize_workflow(select_best(fit_bag))
Last Fit
<-
final_fit last_fit(object = wf_best_finalized, d_split)
collect_metrics(final_fit)
Wie man sieht, ist die Modellgüte im Test-Sample schlechter als in den Train- bzw. Validierungssamples; ein typischer Befund.
Categories:
- statlearning
- trees
- tidymodels
- string