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)
# A tibble: 5 × 7
neighbors .metric .estimator mean n std_err .config
<int> <chr> <chr> <dbl> <int> <dbl> <chr>
1 10 rmse standard 43067. 10 1798. Preprocessor1_Model10
2 9 rmse standard 43089. 10 1774. Preprocessor1_Model09
3 8 rmse standard 43115. 10 1738. Preprocessor1_Model08
4 7 rmse standard 43181. 10 1708. Preprocessor1_Model07
5 6 rmse standard 43317. 10 1682. Preprocessor1_Model06
(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)
# A tibble: 2 × 4
.metric .estimator .estimate .config
<chr> <chr> <dbl> <chr>
1 rmse standard 42554. Preprocessor1_Model1
2 rsq standard 0.717 Preprocessor1_Model1
Die Lösung lautet 4.2554397^{4}.
Categories:
- statlearning
- tidymodels
- num