Aufgabe
Schreiben Sie eine prototypische Analyse für ein Vorhersagemodell mit dem Lasso.
Hinweise:
- Tunen Sie die Penalisierung.
- Verwenden Sie Kreuzvalidierung.
- Verwenden Sie Standardwerte, wo nicht anders angegeben.
- Fixieren Sie Zufallszahlen auf den Startwert 42.
- Verwenden Sie den Datensatz
penguins
.
- Modellformel:
body_mass_g ~ .
Lösung
# 2023-05-14
# Setup:
library(tidymodels)
library(tidyverse)
library(tictoc) # Zeitmessung
# Data:
d_path <- "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv"
d <- read_csv(d_path)
# drop rows with NA in outcome variable:
d <-
d %>%
drop_na(body_mass_g)
set.seed(42)
d_split <- initial_split(d)
d_train <- training(d_split)
d_test <- testing(d_split)
# model:
mod_lasso <-
linear_reg(mode = "regression",
penalty = tune(),
mixture = 1,
engine = "glmnet")
# cv:
set.seed(42)
rsmpl <- vfold_cv(d_train)
# recipe:
rec1_plain <-
recipe(body_mass_g ~ ., data = d_train) %>%
update_role("rownames", new_role = "id") %>%
step_normalize(all_numeric_predictors()) %>%
step_dummy(all_nominal_predictors()) %>%
step_impute_bag(all_predictors())
# check:
d_train_baked <-
prep(rec1_plain) %>% bake(new_data = NULL)
na_n <- sum(is.na(d_train_baked))
# workflow:
wf1 <-
workflow() %>%
add_model(mod_lasso) %>%
add_recipe(rec1_plain)
# tuning:
tic()
wf1_fit <-
wf1 %>%
tune_grid(
resamples = rsmpl)
toc()
# best candidate:
show_best(wf1_fit)
# A tibble: 5 × 7
penalty .metric .estimator mean n std_err .config
<dbl> <chr> <chr> <dbl> <int> <dbl> <chr>
1 1.97e-10 rmse standard 281. 10 12.0 Preprocessor1_Model01
2 4.54e- 9 rmse standard 281. 10 12.0 Preprocessor1_Model02
3 8.93e- 8 rmse standard 281. 10 12.0 Preprocessor1_Model03
4 1.75e- 7 rmse standard 281. 10 12.0 Preprocessor1_Model04
5 1.65e- 6 rmse standard 281. 10 12.0 Preprocessor1_Model05
# finalize wf:
wf1_final <-
wf1 %>%
finalize_workflow(select_best(wf1_fit))
wf1_fit_final <-
wf1_final %>%
last_fit(d_split)
# Modellgüte im Test-Set:
collect_metrics(wf1_fit_final)
# A tibble: 2 × 4
.metric .estimator .estimate .config
<chr> <chr> <dbl> <chr>
1 rmse standard 326. Preprocessor1_Model1
2 rsq standard 0.819 Preprocessor1_Model1
Man beachte: Für regulierte Modelle sind Zentrierung und Skalierung nötig.
Categories:
- tidymodels
- statlearning
- lasso
- lm
- string
- template