0Pricing
R Academy · درس

مواصفات النماذج باستخدام parsnip

حدّد أنواع النماذج ومحركاتها بشكل مستقل عن خطوة التدريب

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

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

توفر parsnip واجهة موحّدة لمئات محركات النماذج. فبدلًا من تعلّم الصياغة الخاصة بكل حزمة (glm() وrandomForest() وe1071::svm())، تكتب مواصفة متسقة واحدة وتخبر parsnip بالمحرك الذي ينبغي استخدامه في الخلفية.

وهذا يعني أنه يمكنك تبديل المحركات — مثلًا من glm إلى stan للانحدار اللوجستي البايزي — بتغيير وسيطة واحدة.

library(parsnip)

# The same interface, different engines
logistic_reg() |> set_engine('glm')    # base R
logistic_reg() |> set_engine('glmnet') # regularized
logistic_reg() |> set_engine('stan')   # Bayesian

logistic_reg() للتصنيف

تحدد logistic_reg() نموذج انحدار لوجستي للتصنيف الثنائي. وصِلها بـ set_engine('glm') لاستخدام محرك GLM المضمّن في R، وبـ set_mode('classification') لتحديد نوع المهمة صراحةً.

يكون النمط ('classification' أو 'regression') مطلوبًا لأنواع النماذج التي تدعم كلا النوعين.

log_spec <- logistic_reg() |>
  set_engine('glm') |>
  set_mode('classification')

print(log_spec)
# Logistic Regression Model Specification (classification)
# Computational engine: glm

rand_forest() مع tune()

تحدد rand_forest() غابة عشوائية. ويمكن تثبيت معلمات مثل mtry (عدد الميزات في كل تقسيم) وtrees، أو ضبطها على tune() باعتبارها عناصر نائبة للبحث عن المعلمات الفائقة.

عند تمرير tune()، سيبحث tidymodels في شبكة من القيم أثناء ضبط النموذج باستخدام التحقق المتقاطع.

rf_spec <- rand_forest(
  mtry  = tune(),
  trees = 500,
  min_n = tune()
) |>
  set_engine('ranger', importance = 'impurity') |>
  set_mode('classification')

print(rf_spec)

linear_reg() للانحدار

تحدّد linear_reg() نموذج انحدار خطي. ويؤدي استخدام set_engine('lm') إلى استخدام المربعات الصغرى العادية، بينما يفعّل set_engine('glmnet') الانتظام من النوعين L1 وL2 عبر معاملي penalty وmixture.

# OLS linear regression
lm_spec <- linear_reg() |>
  set_engine('lm')

# Ridge regression (penalty > 0, mixture = 0)
ridge_spec <- linear_reg(penalty = 0.01, mixture = 0) |>
  set_engine('glmnet')

# Lasso (penalty > 0, mixture = 1)
lasso_spec <- linear_reg(penalty = tune(), mixture = 1) |>
  set_engine('glmnet')

boost_tree() — التعزيز التدرّجي

تحدّد boost_tree() نموذج شجرة معزّزة تدرّجيًا. ويمكنكم استهداف محرّك xgboost أو lightgbm أو C5.0. وتشمل المعلمات القابلة للضبط tree_depth وlearn_rate وloss_reduction.

xgb_spec <- boost_tree(
  trees      = 500,
  tree_depth = tune(),
  learn_rate = tune(),
  loss_reduction = tune()
) |>
  set_engine('xgboost') |>
  set_mode('classification')

print(xgb_spec)

fit() — تدريب النموذج

تدرّب fit(spec, formula, data) مواصفة النموذج باستخدام البيانات الفعلية. ويترجم parsnip المواصفة داخليًا إلى استدعاء المحرّك المناسب. والنتيجة هي كائن نموذج parsnip مُدرَّب.

lm_spec <- linear_reg() |> set_engine('lm')

# Fit the model on training data
lm_fit <- fit(lm_spec, mpg ~ wt + hp + cyl, data = mtcars)

# The fitted object wraps the engine result
print(lm_fit)

# Access the underlying lm object
extract_fit_engine(lm_fit)

fit_xy() — واجهة المصفوفات

تُعدّ fit_xy(spec, x, y) بديلًا عن fit(spec, formula, data). فهي تقبل مباشرةً مصفوفة المتنبئات x ومتجه الاستجابة y، ما يكون مفيدًا عندما تكون بياناتكم قد عولجت مسبقًا وأصبحت في صورة مصفوفة رقمية، كما هو شائع مع الشبكات العصبية أو XGBoost.

x_train <- train_baked |> select(-price)
y_train <- train_baked$price

lm_spec <- linear_reg() |> set_engine('lm')

# Matrix-style fit
lm_fit_xy <- fit_xy(lm_spec, x = x_train, y = y_train)

print(lm_fit_xy)

translate() — عرض كود المحرّك

تُظهر translate(spec) بالضبط ما سيستدعيه parsnip داخليًا لمحرّك معيّن. وهذا مفيد جدًا لتصحيح الأخطاء أو لفهم كيفية تحويل مواصفة parsnip إلى الواجهة الأصلية للمحرّك.

rf_spec <- rand_forest(mtry = 3, trees = 500) |>
  set_engine('ranger') |>
  set_mode('classification')

# See what ranger() call will be generated
translate(rf_spec)

# ranger::ranger(formula = ..., data = ...,
#   num.trees = 500, mtry = 3, ...)

predict() مع parsnip

تشترك جميع نماذج parsnip المُدرَّبة في واجهة predict() نفسها. وفي التصنيف، تُعيد type = 'class' الفئة المتوقعة، بينما تُعيد type = 'prob' احتمالات الفئات. ويُعد هذا الاتساق إحدى أهم مزايا parsnip.

log_fit <- fit(logistic_reg() |> set_engine('glm') |> set_mode('classification'),
               species ~ ., data = train_df)

# Predicted classes
predict(log_fit, new_data = test_df, type = 'class')

# Predicted probabilities
predict(log_fit, new_data = test_df, type = 'prob')

augment() — إلحاق التنبؤات بالبيانات

تلحق augment(fitted_model, new_data) أعمدة التنبؤ مباشرةً بإطار البيانات المُدخل. وهذا مناسب للتقييم، إذ تحتوي النتيجة على القيم الحقيقية والتنبؤات جنبًا إلى جنب، وتكون جاهزة لحساب المقاييس.

log_fit <- fit(
  logistic_reg() |> set_engine('glm') |> set_mode('classification'),
  species ~ ., data = train_df
)

# Get predictions joined to test data
results <- augment(log_fit, new_data = test_df)
head(results[, c('species', '.pred_class', '.pred_setosa')])

مقارنة مواصفات النماذج

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

specs <- list(
  lm    = linear_reg() |> set_engine('lm'),
  ridge = linear_reg(penalty = 0.01, mixture = 0) |> set_engine('glmnet'),
  rf    = rand_forest(trees = 200) |> set_engine('ranger') |> set_mode('regression')
)

fits <- lapply(specs, fit, mpg ~ ., data = train_mtcars)

preds <- lapply(fits, predict, new_data = test_mtcars)

rmse_vals <- sapply(preds, function(p) {
  sqrt(mean((p$.pred - test_mtcars$mpg)^2))
})
print(rmse_vals)

تحقّق سريع

في parsnip، ماذا تُعيد translate(spec)؟

مراجعة parsnip

أهم النقاط من درس مواصفات النماذج باستخدام parsnip:

  • يوفّر parsnip واجهة موحّدة: إذ تُحدَّد نوع النموذج والمحرّك والوضع بصورة منفصلة.
  • تختار set_engine() الحزمة الأساسية، بينما تختار set_mode() وضع التصنيف أو الانحدار.
  • استخدموا tune() كعنصر نائب للمعلمات الفائقة التي سيُبحث عنها لاحقًا.
  • تدرّب fit(spec, formula, data) النموذج، بينما تقبل fit_xy(spec, x, y) المصفوفات.
  • تتسم predict(fit, new_data, type) بالاتساق عبر جميع المحرّكات.
  • تُظهر translate(spec) استدعاء المحرّك لتصحيح الأخطاء.
  • تلحق augment(fit, new_data) التنبؤات بإطار البيانات.
# Parsnip model comparison template
spec <- rand_forest(trees = 500, mtry = tune()) |>
  set_engine('ranger', importance = 'impurity') |>
  set_mode('classification')

print(translate(spec))

# When mtry is fixed:
spec_fixed <- rand_forest(trees = 500, mtry = 5) |>
  set_engine('ranger') |>
  set_mode('classification')
fit_fixed <- fit(spec_fixed, label ~ ., data = train_df)

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

هل درس «مواصفات النماذج باستخدام parsnip» مجاني؟

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

ماذا ستتعلم في «مواصفات النماذج باستخدام parsnip»؟

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

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

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

كم من الوقت يستغرق درس «مواصفات النماذج باستخدام parsnip»؟

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

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

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

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

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