library(tidyverse)
library(tidymodels)diamonds-tidymodels01
ds1
tidymodels
statlearning
string
Aufgabe
Finden Sie ein möglichst “gutes” prädiktives Modell zur Vorhersage des Diamantenpreises im Datensatz diamonds!
Gegenstand dieser Aufgabe ist die Modellierung; Datenvorverarbeitug (wie explorative Datenanalyse) steht nicht im Fokus.
Hinweise:
- Verwenden Sie die Methoden aus
tidymodels. - Hohe Modellgüte (“gutes Modell”) sei definiert über \(R^2\), RMSE und MAE
- Verwenden Sie verschiedene Algorithmen (lineare Modell, kNN, …) und verschiedene Rezepte.
- Resampling und Tuning ist hier noch nicht nötig.s
Der Datensatz ist hier zu beziehen. Außerdem ist er Teil von ggplot2 bzw. des Tidyverse und daher mit data() zu laden, wenn das entsprechende Paket vorhanden ist.
Lösung
Setup
Daten laden:
data(diamonds, package = "ggplot2")Oder so:
diamonds <- read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv")Train- vs. Testdaten:
d_split <- initial_split(diamonds, strata = price)
d_train <- training(d_split)
d_test <- testing(d_split)Modelle:
lin_mod <-
linear_reg()knn_mod <-
nearest_neighbor(mode = "regression")Hilfe zu kNN findet sich z.B. hier.
Rezepte:
rec1 <-
recipe(price ~ ., data = d_train) %>%
update_role(1, new_role = "id") %>%
step_naomit() %>%
step_log(all_outcomes())Rezept prüfen (preppen und backen)
rec1_prepped <-
rec1 %>%
prep()
rec1_preppedd_train_baked <-
bake(rec1_prepped, new_data = d_train)Einen Überblick zu steps findet sich z.B. hier.
Rollen-Definitionen in Tidymodels-Rezepten kann man hier nachlesen.
rec2 <-
recipe(price ~ ., data = d_train) %>%
update_role(1, new_role = "id") %>%
step_impute_knn() %>%
step_log(all_outcomes())Workflows:
wf1 <-
workflow() %>%
add_recipe(rec1) %>%
add_model(lin_mod)wf2 <-
wf1 %>%
update_model(knn_mod)Fitting
fit1 <-
wf1 %>%
fit(d_train)
fit1Fitten des Test-Samples
fit1_test <-
wf1 %>%
last_fit(d_split)
fit1_testModellgüte
collect_metrics(fit1_test)De-logarithmieren, wenn man Vorhersagen in den Rohwerten haben möchte:
collect_predictions(fit1_test) %>%
head()d_test_w_preds <-
collect_predictions(fit1_test) %>%
mutate(pred_raw = exp(.pred))
head(d_test_w_preds)Categories:
- ds1
- tidymodels
- statlearning
- string