knn-ames01

statlearning
tidymodels
num
Published

May 17, 2023

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

library(tidymodels)
data(ames)

Daten aufteilen:

d_split <- initial_split(ames)
d_train <- training(d_split)
d_test <- testing(d_split)

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:

cv1 <- vfold_cv(d_train)

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:

tune1_best <- fit_best(fit1)

Im Test-Sample predicten:

fit_test <- last_fit(tune1_best, d_split)

Metriken einsammeln:

collect_metrics(fit_test)

Damit haben wir die Lösung.


Categories:

  • statlearning
  • tidymodels
  • num