0Pricing
R Academy · درس

هندسة السمات باستخدام recipes

حدّد خطوات المعالجة المسبقة للتطبيع والترميز والتعويض

هندسة السمات باستخدام recipes درس مجاني في R Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

ما المقصود بـ Recipe؟

في tidymodels، تُعد recipe مخططًا أوليًا للمعالجة المسبقة لبياناتك. فهي تسجل الخطوات اللازمة لتحويل البيانات الخام إلى ميزات جاهزة للنموذج — من دون تطبيقها مباشرة.

الدالة الأساسية هي recipe(outcome ~ ., data = train)، التي تحدد الصيغة ومجموعة البيانات المرجعية المستخدمة لتقدير أي إحصاءات مطلوبة أثناء المعالجة المسبقة.

library(recipes)
library(tidymodels)

# Create a recipe using the training data
rec <- recipe(price ~ ., data = train_data)
print(rec)

step_normalize()

تُركّز step_normalize(all_numeric_predictors()) كل متنبئ رقمي بحيث يصبح متوسطه 0، وتُقيّسه ليصبح انحرافه المعياري 1. وهذا ضروري للخوارزميات الحساسة لمقياس الميزات، مثل الانحدار اللوجستي وSVM والشبكات العصبية.

يُحسب المتوسط والانحراف المعياري من مجموعة التدريب، ويُطبّقان باستمرار على بيانات الاختبار عبر bake().

rec <- recipe(price ~ ., data = train_data) |>
  step_normalize(all_numeric_predictors())

# Check what steps are recorded
print(rec)

step_dummy()

تحوّل step_dummy(all_nominal_predictors()) المتغيرات الفئوية (من نوع factor أو character) إلى أعمدة رقمية وهمية (مشفّرة بطريقة one-hot). وتنشئ افتراضيًا k-1 عمودًا لعامل ذي k مستويات، مما يتجنب التعدد الخطي التام.

استخدم one_hot = TRUE مع النماذج القائمة على الأشجار التي تستفيد من ترميز one-hot الكامل.

rec <- recipe(price ~ ., data = train_data) |>
  step_dummy(all_nominal_predictors())

# After prep and bake, factor columns become 0/1 numeric columns
prepped <- prep(rec)
baked <- bake(prepped, new_data = NULL)
names(baked)

step_impute_median()

تؤدي القيم المفقودة إلى فشل معظم محركات النماذج. تستبدل step_impute_median(all_numeric_predictors()) قيم NA بالوسيط المحسوب من مجموعة التدريب. والوسيط أكثر مقاومة للقيم الشاذة من المتوسط عند التعويض.

للمتغيرات الفئوية، استخدم step_impute_mode() لملء القيم بالقيمة الأكثر تكرارًا.

rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_impute_mode(all_nominal_predictors())

print(rec)

step_zv() — إزالة التباين الصفري

تزيل step_zv(all_predictors()) أي متنبئ لا يتضمن سوى قيمة فريدة واحدة (أي تباينه صفري). ولا تحمل هذه الأعمدة أي معلومات، وقد تتسبب في أخطاء في بعض محركات النماذج.

للتباين القريب من الصفر، استخدم step_nzv(all_predictors())، الذي يزيل أيضًا الأعمدة التي تهيمن عليها قيمة واحدة بشكل كبير جدًا.

rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

print(rec)

prep() — تدريب Recipe

تقدّر prep(recipe) جميع المعلمات المطلوبة في الخطوات — مثل المتوسط والانحراف المعياري للتطبيع، والوسيط للتعويض — باستخدام بيانات التدريب. والنتيجة هي recipe مُجهّزة تعرف جميع معلمات التحويل.

نفّذ prep دائمًا على بيانات التدريب فقط لتجنب تسرّب البيانات من مجموعة الاختبار.

# Build the full recipe
rec <- recipe(price ~ ., data = train_data) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

# Estimate parameters from training data
prepped_rec <- prep(rec)
print(prepped_rec)

bake() — تطبيق على بيانات جديدة

تطبّق bake(prepped_recipe, new_data = test_data) جميع خطوات المعالجة المسبقة باستخدام المعلمات المقدّرة مسبقًا على أي مجموعة بيانات. ويضمن ذلك اتساق التحويلات بين التدريب والاختبار.

مرّر new_data = NULL لتطبيق الخطوات على بيانات التدريب المستخدمة أثناء prep().

# Apply recipe to test data
baked_test <- bake(prepped_rec, new_data = test_data)
head(baked_test)

# Apply to training data (same as juice())
baked_train <- bake(prepped_rec, new_data = NULL)
dim(baked_train)

juice() — استخراج بيانات التدريب المعالجة

تُعد juice(prepped_recipe) دالة ملائمة مكافئة لـ bake(prepped_recipe, new_data = NULL). وتعيد النسخة المعالجة مسبقًا من بيانات التدريب المستخدمة أثناء prep().

ملاحظة: أصبحت juice() مهجورةً جزئيًا، وتُفضّل عليها bake(prep, new_data = NULL)، لكنك ستراها في كود tidymodels الأقدم.

# juice() extracts the processed training data
train_processed <- juice(prepped_rec)
glimpse(train_processed)

# Equivalent modern approach
train_modern <- bake(prepped_rec, new_data = NULL)
identical(train_processed, train_modern)  # TRUE

دمج خطوات متعددة

تُطبّق الخطوات بالترتيب الذي أُضيفت به. ويتبع Recipe نموذجي مخصص للإنتاج الترتيب التالي:

  1. التعويض (إصلاح قيم NAs أولًا)
  2. إنشاء الميزات (التفاعلات، ومتعددات الحدود)
  3. الترميز الوهمي (تحويل العوامل)
  4. إزالة التباين الصفري
  5. التطبيع (إجراء القياس في النهاية)

يهم هذا الترتيب — فمثلًا، سيؤدي التطبيع قبل الترميز الوهمي إلى نتائج غير صحيحة.

full_rec <- recipe(sale_price ~ ., data = housing_train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_impute_mode(all_nominal_predictors()) |>
  step_log(sale_price, base = 10) |>
  step_other(all_nominal_predictors(), threshold = 0.05) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

print(full_rec)

فحص نتائج prep

بعد استدعاء prep()، يمكنك فحص ما فعلته كل خطوة باستخدام tidy(prepped_rec). ولكل خطوة معرّف رقمي، ويمكنك التعمق فيها باستخدام tidy(prepped_rec, number = 1) لرؤية المعلمات المقدّرة.

prepped_rec <- prep(full_rec)

# View all steps and their status
tidy(prepped_rec)

# Inspect normalization parameters (mean, sd per column)
tidy(prepped_rec, number = 5)  # step_normalize is step 5

استخدام Recipes عمليًا

تتألق Recipes عند دمجها مع workflows. فبدلًا من استدعاء prep() وbake() يدويًا، تضيف Recipe إلى workflow، ويتولى tidymodels تلقائيًا تنفيذ prep/bake أثناء fit() وpredict().

ويزيل ذلك مصدرًا شائعًا للأخطاء، إذ قد تُطبّق المعالجة المسبقة بشكل مختلف أثناء التدريب مقارنةً بوقت الاستدلال.

library(workflows)

# Recipe + model spec combined in a workflow
wf <- workflow() |>
  add_recipe(full_rec) |>
  add_model(linear_reg() |> set_engine('lm'))

# fit() internally calls prep() + bake() on training data
fitted_wf <- fit(wf, data = housing_train)

# predict() applies bake() to new data automatically
predictions <- predict(fitted_wf, new_data = housing_test)
head(predictions)

اختبار سريع

ماذا يفعل استدعاء prep(recipe) في إطار عمل Recipes ضمن tidymodels؟

مراجعة Recipes

أهم النقاط المستخلصة من هندسة الميزات باستخدام Recipes:

  • يحدد recipe(outcome ~ ., data = train) مخطط المعالجة المسبقة.
  • تُعد step_normalize() وstep_dummy() وstep_impute_median() وstep_zv() الخطوات الأكثر استخدامًا.
  • تقدّر prep() المعلمات من بيانات التدريب فقط — وليس من بيانات الاختبار مطلقًا.
  • تطبّق bake(prepped, new_data) الـ Recipe المدرّبة على أي مجموعة بيانات.
  • يهم ترتيب الخطوات: عوّض ← أنشئ ← رمّز ← أزل ← قِس.
  • في بيئة الإنتاج، غلّف الـ Recipe داخل workflow() لأتمتة prep/bake أثناء fit وpredict.
# Full pipeline in 6 lines
rec <- recipe(target ~ ., data = train) |>
  step_impute_median(all_numeric_predictors()) |>
  step_dummy(all_nominal_predictors()) |>
  step_zv(all_predictors()) |>
  step_normalize(all_numeric_predictors())

prepped <- prep(rec)
train_baked <- bake(prepped, new_data = NULL)
test_baked  <- bake(prepped, new_data = test)

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

هل درس «هندسة السمات باستخدام recipes» مجاني؟

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

ماذا ستتعلم في «هندسة السمات باستخدام recipes»؟

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

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

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

كم من الوقت يستغرق درس «هندسة السمات باستخدام recipes»؟

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

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

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

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

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