library(tidymodels)
library(tidyverse)
library(tictoc) # Rechenzeit messen, optional
# data(penguins, package = "palmerpenguins")
<- "https://vincentarelbundock.github.io/Rdatasets/csv/modeldata/penguins.csv"
d_path <- read_csv(d_path) d
tidymodels-penguins04
ds1
tidymodels
prediction
yacsda
statlearning
num
Aufgabe
Berechnen Sie ein kNN-Modell mit tidymodels und zwar anhand des penguins
Datensatzes.
Modellgleichung: body_mass_g ~ bill_length_mm, data = d_train
.
Gesucht ist R-Quadrat als Maß für die Modellgüte im TEST-Sample.
Hinweise:
- Fixieren Sie die Zufallszahlen auf den Startwert 42.
- Nutzen Sie eine v=5,r=2 CV.
- Tunen Sie \(K\) (Default-Tuning)
- Entfernen Sie fehlende Werte in den Variablen.
- Verzichten Sie auf weitere Schritte der Vorverarbeitung.
Lösung
Setup:
Datensatz auf NAs prüfen:
<-
d2 %>%
d drop_na()
Datensatz aufteilen:
set.seed(42)
<- initial_split(d2)
d_split <- training(d_split)
d_train <- testing(d_split) d_test
Workflow:
<-
rec1 recipe(body_mass_g ~ bill_length_mm, data = d_train) %>%
step_naomit(all_numeric())
<-
knn_model nearest_neighbor(
mode = "regression",
neighbors = tune()
)
<-
wflow workflow() %>%
add_recipe(rec1) %>%
add_model(knn_model)
wflow
Backen:
<- prep(rec1) %>% bake(new_data = NULL)
d_baked %>% head() d_baked
Auf NA prüfen:
sum(is.na(d_baked))
CV:
set.seed(42)
<- vfold_cv(d_train, v = 5, repeats = 2)
folds folds
Tunen:
<-
d_resamples tune_grid(
wflow,resamples = folds,
control = control_grid(save_workflow = TRUE)
)
d_resamples
Bester Kandidat:
show_best(d_resamples)
<- fit_best(d_resamples)
fitbest fitbest
Last Fit:
<- last_fit(fitbest, d_split)
fit_last fit_last
Modellgüte im Test-Sample:
%>% collect_metrics() fit_last
R-Quadrat:
<- collect_metrics(fit_last)[[".estimate"]][2]
sol sol
Categories:
- ds1
- tidymodels
- prediction
- yacsda
- statlearning
- num