Resampling und Cross-Validation mit rsample
Evaluieren Sie Modelle mit k-fold-CV, Bootstrap und verschachteltem Resampling
Resampling und Cross-Validation mit rsample ist eine kostenlose R Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des R Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum Resampling?
Ein einzelner Train-/Test-Split liefert eine unzuverlässige Schätzung der Modellleistung — je nachdem, welche Beobachtungen im Testdatensatz landen, kann das Ergebnis zufällig zu gut oder zu schlecht ausfallen. Beim Resampling wird der Vorgang mehrfach wiederholt, um eine stabile und zuverlässige Schätzung dafür zu erhalten, wie gut Ihr Modell auf neuen Daten generalisiert.
library(rsample)
# Single split — performance estimate depends heavily
# on which 20% ended up as test data
split <- initial_split(mtcars, prop = 0.8)
train <- training(split)
test <- testing(split)
cat('Train:', nrow(train), '| Test:', nrow(test))initial_split()
initial_split(data, prop, strata) erstellt eine einzelne zufällige Aufteilung in Trainings- und Testdaten. Verwenden Sie strata, um nach einer Spalte zu stratifizieren, beispielsweise nach der Zielvariable, und so sicherzustellen, dass das Klassenverhältnis in beiden Teilmengen erhalten bleibt.
library(rsample)
# Stratified split by outcome variable
split <- initial_split(ames, prop = 0.8, strata = Sale_Price)
train <- training(split)
test <- testing(split)
cat('Train rows:', nrow(train))
cat('Test rows:', nrow(test))vfold_cv() — K-Fold-Kreuzvalidierung
vfold_cv(data, v = 10) erstellt 10 Folds. Die Daten werden in 10 gleich große Teile aufgeteilt; 9 davon werden zum Training und 1 zur Validierung verwendet, wobei alle Folds nacheinander als Validierungsfold dienen. Dadurch erhalten Sie 10 Leistungsschätzungen, die für eine stabile Metrik gemittelt werden.
folds <- vfold_cv(housing_train, v = 10, strata = price)
# Each fold is a split object
print(folds)
# Inspect one fold
fold_1 <- folds$splits[[1]]
train_1 <- analysis(fold_1)
val_1 <- assessment(fold_1)
cat('Fold 1 — Train:', nrow(train_1), '| Val:', nrow(val_1))fit_resamples()
fit_resamples(workflow, resamples, metrics) passt Ihren Workflow für jeden Trainingsfold an und wertet ihn mit dem Validierungsfold aus. Dabei werden die angeforderten Metriken gesammelt. Die Funktion gibt ein Tibble mit den Ergebnissen zurück, das Sie mit collect_metrics() zusammenfassen können.
library(tune)
folds <- vfold_cv(housing_train, v = 10)
res <- fit_resamples(
wf, # your workflow
folds,
metrics = metric_set(rmse, rsq)
)
# Average metric across all 10 folds
collect_metrics(res)collect_metrics()
collect_metrics(resample_result) gibt ein übersichtliches Tibble zurück, das die Modellleistung über alle Folds zusammenfasst. Die Spalte mean enthält den Durchschnitt der Metrik und std_err den Standardfehler. Damit erhalten Sie einen Eindruck von der Streuung der Schätzung.
metrics_df <- collect_metrics(res)
print(metrics_df)
# .metric .estimator mean n std_err .config
# rmse standard 24500 10 1200 Preprocessor1_Model1
# rsq standard 0.882 10 0.012 Preprocessor1_Model1
# Pull a single metric
collect_metrics(res) |>
dplyr::filter(.metric == 'rmse') |>
dplyr::pull(mean)bootstraps() — Bootstrap-Resampling
bootstraps(data, times = 25) erstellt Bootstrap-Stichproben: Jede Stichprobe ist eine Zufallsziehung mit Zurücklegen und hat dieselbe Größe wie der ursprüngliche Datensatz. Nicht gezogene Beobachtungen bilden den Out-of-Bag-(OOB-)Bewertungssatz. Bootstrap-Verfahren weisen eine höhere Varianz als k-Fold-Verfahren auf, funktionieren aber gut mit kleinen Datensätzen.
boot_samples <- bootstraps(housing_train, times = 25, strata = price)
print(boot_samples)
# Average proportion of unique rows in each bootstrap
mean(sapply(boot_samples$splits, function(s) {
nrow(analysis(s)) / nrow(housing_train)
}))Monte-Carlo-Kreuzvalidierung
mc_cv(data, prop, times) erstellt times zufällige Aufteilungen, wobei jeweils prop der Daten zum Training verwendet wird. Anders als bei k-Fold kann dieselbe Beobachtung mehrfach im Validierungssatz vorkommen. Das ist nützlich, wenn Sie mehr Resampling-Durchläufe benötigen, als k-Fold bereitstellt.
mc_splits <- mc_cv(housing_train, prop = 0.8, times = 20)
res_mc <- fit_resamples(
wf,
mc_splits,
metrics = metric_set(rmse, rsq)
)
collect_metrics(res_mc)tune_grid() — Hyperparametersuche
Wenn Ihr Workflow tune()-Platzhalter enthält, verwenden Sie tune_grid(wf, resamples, grid), um ein Raster von Hyperparameterwerten zu durchsuchen. Jede Kombination wird in allen Folds ausgewertet, und mit select_best() wird die beste Konfiguration ausgewählt.
rf_spec <- rand_forest(mtry = tune(), trees = tune()) |>
set_engine('ranger') |>
set_mode('regression')
wf_tune <- workflow() |> add_recipe(rec) |> add_model(rf_spec)
grid <- grid_regular(mtry(range = c(2, 10)), trees(range = c(100, 500)), levels = 3)
tune_res <- tune_grid(wf_tune, resamples = folds, grid = grid)
collect_metrics(tune_res) |> head()select_best() und finalize_workflow()
Nach dem Abstimmen wählt select_best(tune_res, metric) die Hyperparameterkombination mit der besten durchschnittlichen Metrik aus. finalize_workflow(wf, best_params) erstellt einen neuen Workflow, in dem diese Werte anstelle von tune() eingesetzt werden.
best_params <- select_best(tune_res, metric = 'rmse')
print(best_params)
# Substitute best values into the workflow
final_wf <- finalize_workflow(wf_tune, best_params)
# Fit on all training data, evaluate on test
final_fit <- last_fit(final_wf, split)
collect_metrics(final_fit)Verschachtelte Kreuzvalidierung
Für eine wirklich unverzerrte Bewertung bei gleichzeitiger Abstimmung von Hyperparametern verwenden Sie eine verschachtelte Kreuzvalidierung: eine äußere Schleife zur Leistungsschätzung und eine innere Schleife zum Abstimmen. Erstellen Sie in rsample ein äußeres vfold_cv und stimmen Sie innerhalb jedes äußeren Folds mit den inneren Folds ab.
# Outer folds for unbiased evaluation
outer_folds <- vfold_cv(housing_train, v = 5)
# For each outer fold, tune on the inner training data
res_nested <- tune_grid(
wf_tune,
resamples = outer_folds,
grid = 10, # 10 random configurations
metrics = metric_set(rmse)
)
collect_metrics(res_nested)Resampling-Strategien vergleichen
Jede Resampling-Strategie hat bestimmte Vor- und Nachteile. Wählen Sie abhängig von der Größe Ihres Datensatzes und Ihrem verfügbaren Rechenbudget:
- k-Fold (v=10): Geringe Verzerrung, moderate Varianz. Die Standardwahl für die meisten Probleme.
- Bootstrap: Geeignet für sehr kleine Datenmengen; höhere Varianz als k-Fold.
- Monte-Carlo-CV: Flexibler; gut für zeitlich begrenztes Abstimmen.
- Wiederholtes k-Fold: Geringere Varianz; verwenden Sie es, wenn Sie zusätzliche Rechenzeit aufbringen können.
# Repeated k-fold: 5-fold repeated 3 times = 15 models fitted
repeated_folds <- vfold_cv(housing_train, v = 5, repeats = 3)
res_rep <- fit_resamples(
wf,
repeated_folds,
metrics = metric_set(rmse, rsq)
)
collect_metrics(res_rep)Kurze Überprüfung
Was gibt collect_metrics() zurück, wenn die Funktion auf ein Ergebnis von fit_resamples() angewendet wird?
Zusammenfassung zu Resampling
Die wichtigsten Erkenntnisse aus „Resampling und Kreuzvalidierung mit rsample“:
initial_split(data, prop, strata)erstellt eine stratifizierte Train-/Test-Aufteilung.vfold_cv(data, v = 10)erstellt Folds für die k-Fold-Kreuzvalidierung.bootstraps(data, times)erstellt Bootstrap-Stichproben für kleine Datensätze.fit_resamples(wf, folds, metrics)wertet einen Workflow über alle Folds hinweg aus.collect_metrics()fasst die Ergebnisse mit Mittelwert und Standardfehler zusammen.tune_grid()durchsucht Hyperparameter;select_best()wählt die beste Kombination aus.finalize_workflow()undlast_fit()schließen die Pipeline vom Abstimmen bis zur Bereitstellung ab.
# Full rsample pipeline
split <- initial_split(data, prop = 0.8, strata = y)
train <- training(split)
folds <- vfold_cv(train, v = 10)
res <- fit_resamples(wf, folds, metrics = metric_set(rmse, rsq))
collect_metrics(res)
# After tuning
best <- select_best(tune_res, metric = 'rmse')
fin_wf <- finalize_workflow(wf_tune, best)
last_fit(fin_wf, split) |> collect_metrics()Lerne R mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 43
- Lektionen
- 159
Häufig gestellte Fragen
Ist die Lektion „Resampling und Cross-Validation mit rsample“ kostenlos?
Ja — der vollständige Text von „Resampling und Cross-Validation mit rsample“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des R Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der R Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Resampling und Cross-Validation mit rsample“?
Evaluieren Sie Modelle mit k-fold-CV, Bootstrap und verschachteltem Resampling Du übst R Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um R Academy zu starten?
Keine Vorkenntnisse erforderlich. R Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Resampling und Cross-Validation mit rsample“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser R Academy-Lektion Code schreiben und ausführen?
Ja. Jede R Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Feature Engineering mit recipes
- Modellspezifikationen mit parsnip
- Workflows: Rezepte und Modelle kombinieren
- Resampling und Cross-Validation mit rsample