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:
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 taggenRezept 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