Pengambilan Sampel Ulang dan Validasi Silang dengan rsample
Evaluasi model dengan CV k-lipatan, bootstrap, dan pengambilan sampel ulang bertingkat.
Pengambilan Sampel Ulang dan Validasi Silang dengan rsample adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Mengapa Melakukan Pengambilan Sampel Ulang?
Satu pembagian data pelatihan/pengujian memberikan perkiraan kinerja model yang bervariasi—Anda bisa saja beruntung atau kurang beruntung dengan observasi yang masuk ke kumpulan pengujian. Pengambilan sampel ulang mengulangi proses tersebut beberapa kali untuk memperoleh perkiraan yang stabil dan andal tentang bagaimana model Anda bekerja pada data baru.
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) membuat satu pembagian acak menjadi kumpulan pelatihan dan pengujian. Gunakan strata untuk melakukan stratifikasi berdasarkan sebuah kolom (misalnya variabel hasil) guna memastikan keseimbangan kelas tetap terjaga di kedua bagian.
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() — Validasi Silang K-Lipatan
vfold_cv(data, v = 10) membuat 10 lipatan. Data dibagi menjadi 10 bagian yang sama besar; 9 bagian digunakan untuk pelatihan dan 1 bagian untuk validasi, lalu proses ini bergiliran pada semua lipatan. Dengan demikian, diperoleh 10 perkiraan kinerja yang dirata-ratakan untuk menghasilkan metrik yang stabil.
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) melatih alur kerja pada setiap lipatan pelatihan dan mengevaluasinya pada lipatan validasi, sambil mengumpulkan metrik yang diminta. Fungsi ini mengembalikan tibble hasil yang dapat Anda rangkum dengan collect_metrics().
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) mengembalikan tibble rapi yang merangkum kinerja model di semua lipatan. Kolom mean adalah rata-rata metrik, sedangkan std_err adalah galat standar, yang memberi gambaran tentang variasi dalam perkiraan tersebut.
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() — Pengambilan Sampel Ulang Bootstrap
bootstraps(data, times = 25) membuat sampel bootstrap: setiap sampel merupakan pengambilan acak dengan pengembalian, dengan ukuran yang sama seperti himpunan data asli. Observasi yang tidak terambil membentuk kumpulan penilaian di luar kantong (OOB). Bootstrap memiliki varians yang lebih tinggi daripada k-lipatan, tetapi bekerja dengan baik pada himpunan data kecil.
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)
}))Validasi Silang Monte Carlo
mc_cv(data, prop, times) membuat times pembagian acak, yang masing-masing menggunakan prop bagian data untuk pelatihan. Berbeda dengan k-lipatan, observasi yang sama dapat muncul beberapa kali dalam kumpulan validasi. Metode ini berguna ketika Anda memerlukan lebih banyak iterasi pengambilan sampel ulang daripada yang disediakan k-lipatan.
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() — Pencarian Hiperparameter
Ketika alur kerja Anda berisi penanda pengganti tune(), gunakan tune_grid(wf, resamples, grid) untuk mencari berbagai nilai hiperparameter dalam suatu grid. Setiap kombinasi dievaluasi pada semua lipatan dan konfigurasi terbaik dipilih dengan select_best().
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() dan finalize_workflow()
Setelah penalaan, select_best(tune_res, metric) memilih kombinasi hiperparameter dengan rata-rata metrik terbaik. finalize_workflow(wf, best_params) membuat alur kerja baru dengan mengganti tune() menggunakan nilai-nilai tersebut.
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)Validasi Silang Bersarang
Untuk evaluasi yang benar-benar tidak bias saat Anda juga menala hiperparameter, gunakan validasi silang bersarang: perulangan luar untuk memperkirakan kinerja dan perulangan dalam untuk penalaan. Dalam rsample, buat vfold_cv luar dan lakukan penalaan di setiap lipatan luar menggunakan lipatan dalam.
# 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)Membandingkan Strategi Pengambilan Sampel Ulang
Setiap strategi pengambilan sampel ulang memiliki kelebihan dan kekurangan. Pilih berdasarkan ukuran himpunan data dan anggaran komputasi Anda:
- k-lipatan (v=10): Bias rendah, varians sedang. Pilihan bawaan untuk sebagian besar masalah.
- Bootstrap: Bekerja dengan data yang sangat sedikit; variansnya lebih tinggi daripada k-lipatan.
- CV Monte Carlo: Lebih fleksibel; cocok untuk penalaan dengan batasan waktu.
- k-lipatan berulang: Varians lebih rendah; gunakan jika Anda mampu menyediakan komputasi tambahan.
# 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)Pemeriksaan Singkat
Apa yang dikembalikan oleh collect_metrics() ketika diterapkan pada hasil fit_resamples()?
Ringkasan Pengambilan Sampel Ulang
Hal-hal penting dari Pengambilan Sampel Ulang dan Validasi Silang dengan rsample:
initial_split(data, prop, strata)membuat pembagian data pelatihan/pengujian yang terstratifikasi.vfold_cv(data, v = 10)membuat lipatan validasi silang k-lipatan.bootstraps(data, times)membuat sampel bootstrap untuk himpunan data kecil.fit_resamples(wf, folds, metrics)mengevaluasi alur kerja di semua lipatan.collect_metrics()merangkum hasil dengan rata-rata dan galat standar.tune_grid()mencari hiperparameter;select_best()memilih yang terbaik.finalize_workflow()+last_fit()menyelesaikan alur dari penalaan hingga penerapan.
# 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()Belajar R dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 43
- Pelajaran
- 159
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pengambilan Sampel Ulang dan Validasi Silang dengan rsample” gratis?
Ya — teks lengkap “Pengambilan Sampel Ulang dan Validasi Silang dengan rsample” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pengambilan Sampel Ulang dan Validasi Silang dengan rsample”?
Evaluasi model dengan CV k-lipatan, bootstrap, dan pengambilan sampel ulang bertingkat. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pengambilan Sampel Ulang dan Validasi Silang dengan rsample” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Rekayasa Fitur dengan recipes
- Spesifikasi Model dengan parsnip
- Alur Kerja: Menggabungkan Resep dan Model
- Pengambilan Sampel Ulang dan Validasi Silang dengan rsample