0Pricing
R Academy · درس

إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample

قيّم النماذج باستخدام التحقق المتقاطع k-fold وBootstrap وإعادة أخذ العينات المتداخلة

إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample درس مجاني في R Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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-Fold

تنشئ vfold_cv(data, v = 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) سير العمل على كل طية تدريب وتقيّمه على طية التحقق، مع جمع المقاييس المطلوبة. وتُعيد جدولًا من نوع tibble للنتائج، ويمكنكم تلخيصه باستخدام 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) جدول tibble منسقًا يلخّص أداء النموذج عبر جميع الطيات. ويمثل العمود 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() — إعادة أخذ عينات Bootstrap

تنشئ bootstraps(data, times = 25) عينات Bootstrap؛ إذ تمثل كل عينة سحبًا عشوائيًا مع الإرجاع وبالحجم نفسه لمجموعة البيانات الأصلية. وتشكل الملاحظات التي لم تُسحب مجموعة التقييم خارج الحقيبة (OOB). وتتميز عينات Bootstrap بتباين أعلى من k-fold، لكنها تعمل جيدًا مع مجموعات البيانات الصغيرة.

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

تنشئ mc_cv(data, prop, times) عمليات تقسيم عشوائية بعدد times، يستخدم كل منها النسبة prop من البيانات للتدريب. وعلى خلاف k-fold، قد تظهر الملاحظة نفسها في مجموعة التحقق عدة مرات. ويكون هذا مفيدًا عندما تحتاجون إلى تكرارات أكثر لإعادة أخذ العينات مما يوفّره k-fold.

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-fold (v=10): تحيز منخفض وتباين متوسط. وهو الخيار الافتراضي لمعظم المسائل.
  • Bootstrap: يعمل مع البيانات الصغيرة جدًا، لكنه أعلى تباينًا من k-fold.
  • Monte Carlo CV: أكثر مرونة، ومناسب للضبط المقيّد بالوقت.
  • Repeated k-fold: تباين أقل، ويُستخدم عندما يمكنكم تحمّل تكلفة حسابية أكبر.
# 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-fold.
  • ينشئ bootstraps(data, times) عينات Bootstrap لمجموعات البيانات الصغيرة.
  • يقيّم 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()

الأسئلة الشائعة

هل درس «إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample» مجاني؟

نعم — نص درس «إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample»؟

قيّم النماذج باستخدام التحقق المتقاطع k-fold وBootstrap وإعادة أخذ العينات المتداخلة تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. هندسة السمات باستخدام recipes
  2. مواصفات النماذج باستخدام parsnip
  3. مسارات العمل: دمج الوصفات والنماذج
  4. إعادة أخذ العينات والتحقق المتقاطع باستخدام rsample
← العودة إلى R Academy