library(tidymodels)
library(tidyverse)
data(penguins, package = "palmerpenguins")wfsets_penguins02
Aufgabe
Berechnen Sie die Vorhersagegüte (RMSE) für folgende Lernalgorithmen:
- lineares Modell
- knn (neighbors: tune)
Modellgleichung: body_mass_g ~ bill_length_mm, data = d_train.
Tunen Sie bei neighbors folgende Werte: 5, 10, 15, 20, 35, 30 und betrachten Sie deren Modellgüte.
Nutzen Sie minimale Vorverarbeitung.
Berichten Sie die den RSME.
Lösung
Setup
Daten
d <-
penguins %>%
drop_na()d_split <- initial_split(d)
d_train <- training(d_split)
d_test <- testing(d_split)Modelle
Lineares Modell:
mod_lin <- linear_reg()
mod_knn <- nearest_neighbor(mode = "regression",
neighbors = tune())Rezepte
rec_basic <- recipe(body_mass_g ~ bill_length_mm, data = d_train) %>%
step_normalize(all_predictors())Resampling
rsmpls <- vfold_cv(d_train)Workflow Set
wf_set <-
workflow_set(
preproc = list(rec_simple = rec_basic),
models = list(mod_lm = mod_lin,
mod_nn = mod_knn)
)Tuningparameter-Werte bestimmen
Welche Tuningparameter hatten wir noch mal ausgewiesen?
mod_knn %>%
extract_parameter_set_dials()Updaten wir die Parameter mit unseren Werten, also min. 5 Nachbarn und max. 20 Nachbarn.
params_knn <-
mod_knn %>%
extract_parameter_set_dials() %>%
update(neighbors = neighbors(c(5, 20)))Diese Infos ergänzen wir jetzt in das Workflow-Set-Objekt für den Workflow mit der ID “rec_simple_mod_nn” unter der Spalte “Options”:
wf_set <-
wf_set %>%
option_add(param_info = params_knn, id = "rec_simple_mod_nn") Fitten
wf_set_fit <-
wf_set %>%
workflow_map(resamples = rsmpls)Check:
wf_set_fit %>% pluck("result")Bester Kandidat
autoplot(wf_set_fit)
rank_results(wf_set_fit, rank_metric = "rmse") %>%
filter(.metric == "rmse")Am besten war das lineare Modell, aber schauen wir uns auch mal das knn-Modell an, v.a. um zu wissen, wie man den besten Tuningparameter-Wert sieht:
wf_knn <-
extract_workflow_set_result(wf_set_fit, "rec_simple_mod_nn")wf_knn %>% autoplot()
wf_knn %>% select_best()Last Fit
best_wf <-
wf_set_fit %>%
extract_workflow("rec_simple_mod_lm")Finalisieren müssen wir diesen Workflow nicht, da er keine Tuningparameter hatte.
fit_final <-
best_wf %>%
last_fit(d_split)Modellgüte im Test-Set
collect_metrics(fit_final)Categories:
- R
- statlearning
- tidymodels
- num