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
d_split <- initial_split(mtcars)
d_train <- training(d_split)
d_test <- testing(d_split)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
rsmpl <- vfold_cv(d_train, v = 2)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:
tune_grid <- grid_regular(extract_parameter_set_dials(mod_tree), levels = 5)
tune_gridDa 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_treetic()
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