library(tidymodels)
library(tidyverse)
library(easystats)
data("penguins", package = "palmerpenguins")predictioncontest1
R
ds1
string
Question
Aufgabe
Erstellen Sie eine Analyse, die einem typischen Vorhersageprojekt entspricht!
Nutzen Sie den Datensatz penguins!
Sagen Sie die Variable body_mass_g vorher.
Hinweise:
- Halten Sie die Analyse einfach.
- Teilen Sie Test- vs. Train-Set hälftig auf.
- Teilen Sie Analysis vs. Assessment-Set 3:1 auf.
- Den Datensatz
penguinskönnen Sie entweder aus dem Paketpalmerpenguinsbeziehen oder z.B. von hier viaread_csv()importieren. - Orientieren Sie sich im Übrigen an den allgemeinen Hinweisen des Datenwerks.
Lösung
Pakete laden:
Man erinnere sich, dass ein R-Paket erst (einmalig) installiert sein muss, bevor Sie darauf zugreifen können, etwa um Daten - wie den Datensatz penguins - daraus zu beziehen.
Zeilen mischen und Train- vs. Testset aufteilen:
penguins2 <-
penguins %>%
sample_n(size = nrow(.))
d_train <- penguins2 %>% slice(1:(344/2))
d_test <- penguins2 %>% slice(173:nrow(penguins))Das Trainset weiter aufteilen:
d_split <- initial_split(d_train)
d_analysis <- training(d_split)
d_assessment <- testing(d_split)Rezept definieren:
rec1 <-
recipe(body_mass_g ~ ., data = d_analysis) %>%
step_impute_knn(all_predictors()) %>%
step_normalize(all_numeric(), -all_outcomes())Rezept prüfen:
d_analysis_baked <-
rec1 %>%
prep() %>%
bake(new_data = NULL)
describe_distribution(d_analysis_baked)| Variable | Mean | SD | IQR | Min | Max | Skewness | Kurtosis | n | n_Missing |
|---|---|---|---|---|---|---|---|---|---|
| bill_length_mm | 0.000 | 1.0000 | 1.731310 | -2.159228 | 2.560870 | 0.0760789 | -0.8319692 | 129 | 0 |
| bill_depth_mm | 0.000 | 1.0000 | 1.469785 | -2.113935 | 2.137943 | -0.2111715 | -0.6801013 | 129 | 0 |
| flipper_length_mm | 0.000 | 1.0000 | 1.707152 | -1.535114 | 2.084049 | 0.4487826 | -0.9893612 | 129 | 0 |
| year | 0.000 | 1.0000 | 2.359469 | -1.198025 | 1.161444 | -0.0296827 | -1.6124172 | 129 | 0 |
| body_mass_g | 4225.969 | 851.5118 | 1325.000000 | 2900.000000 | 6300.000000 | 0.5405268 | -0.7594811 | 129 | 0 |
Workflow und CV definieren:
m1 <-
linear_reg()
wf1 <-
workflow() %>%
add_recipe(rec1) %>%
add_model(m1)
cv_scheme <- vfold_cv(d_analysis, v = 2)Fitten (hier kein Tuning):
fit1 <-
wf1 %>%
tune_grid(resamples = cv_scheme)Finalisieren:
show_best(fit1)| .metric | .estimator | mean | n | std_err | .config |
|---|---|---|---|---|---|
| rmse | standard | 315.3654 | 2 | 15.70452 | pre0_mod0_post0 |
wf1_final <-
wf1 %>%
finalize_workflow(show_best(fit1))
wf1_final══ Workflow ════════════════════════════════════════════════════════════════════
Preprocessor: Recipe
Model: linear_reg()
── Preprocessor ────────────────────────────────────────────────────────────────
2 Recipe Steps
• step_impute_knn()
• step_normalize()
── Model ───────────────────────────────────────────────────────────────────────
Linear Regression Model Specification (regression)
Computational engine: lm
Modellgüte:
fit1_final <-
wf1_final %>%
last_fit(d_split)
collect_metrics(fit1_final)| .metric | .estimator | .estimate | .config |
|---|---|---|---|
| rmse | standard | 226.9887784 | pre0_mod0_post0 |
| rsq | standard | 0.9127546 | pre0_mod0_post0 |
fit1_train <-
wf1_final %>%
fit(d_train)
fit1_test <-
fit1_train %>%
predict(d_test)
head(fit1_test)| .pred |
|---|
| 4709.582 |
| 3836.121 |
| 4169.211 |
| 4319.333 |
| 3383.746 |
| 3506.382 |
Vgl https://workflows.tidymodels.org/reference/predict-workflow.html
Submitten:
subm_df <-
d_test %>%
mutate(id = 173:344) %>%
bind_cols(fit1_test) %>%
select(id, .pred) %>%
rename(pred = .pred)Und als CSV-Datei speichern:
#write_csv(subm_df, file = "submission_blabla.csv")Categories:
- R
- ds1
- sose22
- string