R Academy · บทเรียน

การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample

ประเมินโมเดลด้วยการตรวจสอบไขว้แบบ k ส่วน, บูตสแตรป และการสุ่มตัวอย่างใหม่แบบซ้อน

บทเรียน 4 จาก 413 ขั้นตอน

การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงต้องสุ่มตัวอย่างซ้ำ

การแบ่งข้อมูลฝึก/ทดสอบเพียงครั้งเดียวให้ค่าประมาณประสิทธิภาพของแบบจำลองที่ผันผวน เพราะคุณอาจโชคดีหรือโชคร้ายกับข้อมูลสังเกตที่ถูกจัดให้อยู่ในชุดทดสอบ การสุ่มตัวอย่างซ้ำจะทำกระบวนการนี้หลายครั้ง เพื่อให้ได้ค่าประมาณที่คงที่และน่าเชื่อถือว่ะแบบจำลองของคุณจะทำงานกับข้อมูลใหม่ได้ดีเพียงใด

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) สร้างการแบ่งข้อมูลแบบสุ่มครั้งเดียวออกเป็นชุดฝึกและชุดทดสอบ ใช้ strata เพื่อแบ่งชั้นตามคอลัมน์ เช่น ตัวแปรผลลัพธ์ เพื่อให้มั่นใจว่าสัดส่วนประเภทในทั้งสองส่วนยังคงสมดุล

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 ส่วน

vfold_cv(data, v = 10) สร้างส่วนข้อมูล 10 ส่วน ข้อมูลจะถูกแบ่งเป็น 10 ส่วนเท่า ๆ กัน โดยใช้ 9 ส่วนสำหรับฝึกและ 1 ส่วนสำหรับตรวจสอบ แล้วหมุนเวียนจนครบทุกส่วน วิธีนี้ให้ค่าประมาณประสิทธิภาพ 10 ค่า ซึ่งนำมาเฉลี่ยเป็นตัวชี้วัดที่มีเสถียรภาพ

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) ฝึกเวิร์กโฟลว์กับแต่ละส่วนฝึก และประเมินกับส่วนตรวจสอบ พร้อมรวบรวมตัวชี้วัดที่ร้องขอ ฟังก์ชันนี้ส่งคืนทิบเบิลของผลลัพธ์ ซึ่งคุณสามารถสรุปด้วย 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) ส่งคืนทิบเบิลแบบเป็นระเบียบที่สรุปประสิทธิภาพของแบบจำลองจากทุกส่วน คอลัมน์ mean คือค่าเฉลี่ยของตัวชี้วัด และ std_err คือค่าคลาดเคลื่อนมาตรฐาน ซึ่งช่วยให้คุณเห็นความแปรปรวนของค่าประมาณ

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() — การสุ่มตัวอย่างซ้ำแบบบูตสแตรป

bootstraps(data, times = 25) สร้างตัวอย่างบูตสแตรป โดยแต่ละตัวอย่างเป็นการสุ่มข้อมูลแบบใส่คืนและมีขนาดเท่ากับชุดข้อมูลเดิม ข้อมูลสังเกตที่ไม่ถูกสุ่มจะรวมกันเป็นชุดประเมินนอกถุง (OOB) การบูตสแตรปมีความแปรปรวนสูงกว่าแบบ k ส่วน แต่ทำงานได้ดีกับชุดข้อมูลขนาดเล็ก

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)
}))

การตรวจสอบไขว้แบบมอนติคาร์โล

mc_cv(data, prop, times) สร้างการแบ่งข้อมูลแบบสุ่มจำนวน times ครั้ง โดยแต่ละครั้งใช้ข้อมูลสัดส่วน prop สำหรับการฝึก ต่างจากแบบ k ส่วน ข้อมูลสังเกตเดียวกันอาจปรากฏในชุดตรวจสอบหลายครั้ง วิธีนี้มีประโยชน์เมื่อต้องการทำการสุ่มตัวอย่างซ้ำมากกว่าที่แบบ k ส่วนรองรับ

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() — การค้นหาพารามิเตอร์ไฮเปอร์

เมื่อเวิร์กโฟลว์ของคุณมีตัวยึดตำแหน่ง tune() ให้ใช้ tune_grid(wf, resamples, grid) เพื่อค้นหาค่าพารามิเตอร์ไฮเปอร์จากตารางค่าที่กำหนด ระบบจะประเมินแต่ละชุดผสมกับทุกส่วน และเลือกการกำหนดค่าที่ดีที่สุดด้วย 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() และ finalize_workflow()

หลังการปรับแต่ง select_best(tune_res, metric) จะเลือกชุดผสมพารามิเตอร์ไฮเปอร์ที่มีค่าเฉลี่ยของตัวชี้วัดดีที่สุด ส่วน finalize_workflow(wf, best_params) จะสร้างเวิร์กโฟลว์ใหม่ โดยแทนที่ tune() ด้วยค่าเหล่านั้น

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)

การตรวจสอบไขว้แบบซ้อน

หากต้องการประเมินผลอย่างไม่เอนเอียงอย่างแท้จริงในกรณีที่มีการปรับแต่งพารามิเตอร์ไฮเปอร์ด้วย ให้ใช้ การตรวจสอบไขว้แบบซ้อน ซึ่งมีวงรอบภายนอกสำหรับประมาณประสิทธิภาพ และวงรอบภายในสำหรับปรับแต่ง ใน rsample ให้สร้าง vfold_cv ภายนอก แล้วปรับแต่งภายในแต่ละส่วนภายนอกโดยใช้ส่วนภายใน

# 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)

การเปรียบเทียบวิธีสุ่มตัวอย่างซ้ำ

วิธีสุ่มตัวอย่างซ้ำแต่ละแบบมีข้อแลกเปลี่ยน ให้เลือกตามขนาดชุดข้อมูลและงบประมาณด้านการคำนวณ:

  • k ส่วน (v=10): เอนเอียงต่ำ ความแปรปรวนปานกลาง เป็นตัวเลือกเริ่มต้นสำหรับปัญหาส่วนใหญ่
  • บูตสแตรป: ทำงานได้กับข้อมูลขนาดเล็กมาก แต่มีความแปรปรวนสูงกว่าแบบ k ส่วน
  • การตรวจสอบไขว้แบบมอนติคาร์โล: ยืดหยุ่นกว่า เหมาะสำหรับการปรับแต่งที่มีเวลาจำกัด
  • k ส่วนแบบทำซ้ำ: ความแปรปรวนต่ำกว่า ใช้เมื่อคุณมีทรัพยากรการคำนวณเพียงพอ
# 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)

ตรวจสอบความเข้าใจ

collect_metrics() ส่งคืนอะไรเมื่อนำไปใช้กับผลลัพธ์จาก fit_resamples()

สรุปการสุ่มตัวอย่างซ้ำ

ประเด็นสำคัญจากการสุ่มตัวอย่างซ้ำและการตรวจสอบไขว้ด้วย rsample:

  • initial_split(data, prop, strata) สร้างการแบ่งข้อมูลฝึก/ทดสอบแบบแบ่งชั้น
  • vfold_cv(data, v = 10) สร้างส่วนข้อมูลสำหรับการตรวจสอบไขว้แบบ k ส่วน
  • bootstraps(data, times) สร้างตัวอย่างบูตสแตรปสำหรับชุดข้อมูลขนาดเล็ก
  • fit_resamples(wf, folds, metrics) ประเมินเวิร์กโฟลว์จากทุกส่วน
  • collect_metrics() สรุปผลลัพธ์ด้วยค่าเฉลี่ยและค่าคลาดเคลื่อนมาตรฐาน
  • tune_grid() ค้นหาพารามิเตอร์ไฮเปอร์ ส่วน select_best() เลือกชุดที่ดีที่สุด
  • finalize_workflow() + last_fit() ทำกระบวนการตั้งแต่การปรับแต่งจนถึงการนำแบบจำลองไปใช้งานให้เสร็จสมบูรณ์
# 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()
เริ่มต้นได้ฟรี

เรียนรู้ R ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
43
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample”

ประเมินโมเดลด้วยการตรวจสอบไขว้แบบ k ส่วน, บูตสแตรป และการสุ่มตัวอย่างใหม่แบบซ้อน คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. วิศวกรรมคุณลักษณะด้วย recipes
  2. การกำหนดรายละเอียดโมเดลด้วย parsnip
  3. เวิร์กโฟลว์: การรวมสูตรกับโมเดล
  4. การสุ่มตัวอย่างใหม่และการตรวจสอบไขว้ด้วย rsample
← กลับไปที่ R Academy