library(tidymodels)
data(ames)
knn-ames01
statlearning
tidymodels
num
Aufgabe
Berechnen Sie ein knn-Modell für den Datensatz ames
!
Nutzen Sie diese Modellformel: Sale_Price ~ Lot_Area + Fireplaces + Longitude + Latitude
.
Berichten Sie die Modellgüte.
Hinweise:
- Tunen Sie \(k\) mit den Werten 1 bis 10.
- Teilen Sie in Train- und Test-Sample auf.
- Verwenden Sie Defaults der Funktionen, wo nicht anders angegeben.
- z-Transformieren Sie die Prädiktoren.
- Verwenden Sie den RSME als Kennzahl der Modellgüte.
Lösung
Daten aufteilen:
<- initial_split(ames)
d_split <- training(d_split)
d_train <- testing(d_split) d_test
Modell definieren:
<-
mod1 nearest_neighbor(
mode = "regression",
neighbors = tune()) # k-Wert zum Tunen taggen
Rezept definieren:
<-
rec1 recipe(Sale_Price ~ Lot_Area + Fireplaces + Longitude + Latitude, data = d_split) %>%
step_normalize(all_predictors())
Workflow definieren:
<-
wf1 workflow() %>%
add_model(mod1) %>%
add_recipe(rec1)
Resampling definieren:
<- vfold_cv(d_train) cv1
Tuning definieren:
<-
k_grid tibble(neighbors = 1:10)
Fitting:
<-
fit1 tune_grid(wf1,
resamples = vfold_cv(d_train),
metrics = metric_set(rmse), # nur RMSE als Modellgüte, Default ist RMSE und R2
grid = k_grid,
control = control_grid(save_workflow = TRUE) # nur nötig für "fit_best", s.u.
)
Metriken im Train-Sample (genauer: im Assessment-Sample):
show_best(fit1)
(Komplettes) Train-Sample mit bestem Tuning-Kandidat fitten:
<- fit_best(fit1) tune1_best
Im Test-Sample predicten:
<- last_fit(tune1_best, d_split) fit_test
Metriken einsammeln:
collect_metrics(fit_test)
Damit haben wir die Lösung.
Categories:
- statlearning
- tidymodels
- num