Hinweis: Andere Arten von Tuning-Grids sind sinnvoller, hier ist nur zum Vergleich mit anderen Aufgaben diese Form des Tuning-Grids gewählt.
Die Zeilen im Tuninggrid zeigen uns, für wie viele Modellparameter ein Modell berechnet wird. Natürlich üblicherweise jedes Modell mit Resampling. Da kommt in Summe ein mitunter sehr große Menge an Modellberechnungen zusammen.
Mit Speed-up ist schneller also ohne. Hier haben wir einen Entscheidungsbaum berechnet, der ist nicht so sehr parallelisierbar. Bei einem “Wald-Modell”, wie Random Forests, sollte der Vorteil der Parallisierung viel deutlich sein.
Categories:
statlearning
trees
tidymodels
speed
string
Source Code
---exname: tidymodels-tree4expoints: 1extype: stringexsolution: NAcategories:- statlearning- trees- tidymodels- speed- stringdate: '2023-11-08'slug: tidymodels-tree4title: tidymodels-tree4---# AufgabeBerechnen Sie folgendes einfache Modell:1. EntscheidungsbaumModellformel: `body_mass_g ~ .` (Datensatz `palmerpenguins::penguins`)Hier geht es darum, die Geschwindigkeit (und den Ressourcenverbrauch) beim Fitten zu verringern.Benutzen Sie dazu folgende Methoden- Auslassen gering performanter Tuningparameterwerte- Verwenden Sie ein Anova-Grid-Search!- Parallelisieren Sie auf mehrere Kerne (wenn möglich).Hinweise:- Tunen Sie alle Parameter (die der Engine anbietet). - Verwenden Sie Defaults, wo nicht anders angegeben.- Beachten Sie die [üblichen Hinweise](https://datenwerk.netlify.app/hinweise).</br></br></br></br></br></br></br></br></br></br># Lösung## Setup```{r}library(tidymodels)data("penguins", package ="palmerpenguins")library(tictoc) # Zeitmessunglibrary(finetune) # tune_race_anovalibrary(doParallel) # mehrere CPUs nutzen set.seed(42)```Entfernen wir Fälle ohne y-Wert:```{r}d <- penguins %>%drop_na(body_mass_g)```## Daten teilen```{r}set.seed(42)d_split <-initial_split(d)d_train <-training(d_split)d_test <-testing(d_split)```## Modell(e)```{r}mod_tree <-decision_tree(mode ="regression",cost_complexity =tune(),tree_depth =tune(),min_n =tune())```## Rezept(e)```{r}rec_plain <-recipe(body_mass_g ~ ., data = d_train)```## Resampling```{r}set.seed(42)rsmpl <-vfold_cv(d_train)```## Workflows```{r}wf_tree <-workflow() %>%add_recipe(rec_plain) %>%add_model(mod_tree)```## Tuning-GridTuninggrid:```{r}tune_grid <-grid_regular(extract_parameter_set_dials(mod_tree), levels =5)```*Hinweis*: Andere Arten von Tuning-Grids sind sinnvoller,hier ist nur zum Vergleich mit anderen Aufgaben diese Form des Tuning-Grids gewählt.Die Zeilen im Tuninggrid zeigen uns, für wie viele Modellparameter ein Modell berechnet wird.Natürlich üblicherweise jedes Modell mit Resampling.Da kommt in Summe ein mitunter sehr große Menge an Modellberechnungen zusammen.## Ohne Speed-up```{r}tic()fit_tree <-tune_grid(object = wf_tree,grid = tune_grid,metrics =metric_set(rmse),resamples = rsmpl)toc()```Die angegebene Rechenzeit bezieht sich auf einen 4-Kerne-MacBook Pro (2020).## Mit Speeed-up 1```{r speed1}tic()fit_tree2 <- tune_race_anova(object = wf_tree, grid = tune_grid, metrics = metric_set(rmse), control = control_race(verbose = FALSE, pkgs = c("tidymodels"), save_pred = TRUE), resamples = rsmpl)toc()```## Mit Speeed-up 2```{r speed2}doParallel::registerDoParallel()tic()fit_tree2 <- tune_race_anova( object = wf_tree, grid = tune_grid, metrics = metric_set(rmse), control = control_race(verbose = FALSE, pkgs = c("tidymodels"), save_pred = TRUE), resamples = rsmpl)toc()```## Mit Speeed-up 3```{r speed3}doParallel::registerDoParallel()tic()fit_tree2 <- tune_grid(object = wf_tree, grid = tune_grid, metrics = metric_set(rmse), control = control_grid(verbose = FALSE, save_pred = TRUE), resamples = rsmpl)toc()```## FazitMit Speed-up ist schneller also ohne.Hier haben wir einen Entscheidungsbaum berechnet, der ist nicht so sehr parallelisierbar. Bei einem "Wald-Modell", wie Random Forests, sollte der Vorteil der Parallisierung viel deutlich sein.---Categories: - statlearning- trees- tidymodels- speed- string