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:
<- read_csv("https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv") diamonds
Train- vs. Testdaten:
<- initial_split(diamonds, strata = price)
d_split
<- training(d_split)
d_train <- testing(d_split) d_test
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_prepped
<-
d_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)
fit1
Fitten des Test-Samples
<-
fit1_test %>%
wf1 last_fit(d_split)
fit1_test
Modellgü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