التعزيز التدرجي باستخدام xgboost
اضبط معاملات xgboost والإيقاف المبكر وجداول معدل التعلم
التعزيز التدرجي باستخدام xgboost درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
ما التعزيز التدرجي؟
يبني التعزيز التدرجي تجميعًا بالتتابع. تصحح كل شجرة جديدة الأخطاء المتبقية للتجميع السابق من خلال الملاءمة للتدرج السالب لدالة الخسارة. وعلى خلاف الغابات العشوائية (الأشجار المتوازية)، يبني التعزيز الأشجار واحدةً تلو الأخرى، بحيث تتعلم كل شجرة من أخطاء الشجرة السابقة.
library(xgboost)
# XGBoost expects data in a special matrix format
# We'll build a simple example step by step
cat('XGBoost version:', packageVersion('xgboost'))
# Key concept: each tree reduces the ensemble error
# Final prediction = sum of all tree predictionsxgb.DMatrix()
يمثل xgb.DMatrix(data, label) تنسيق البيانات الداخلي المحسّن لـXGBoost. فهو يخزّن مصفوفة الميزات ومتجه التسميات معًا، مما يتيح حسابًا سريعًا وفعالًا من حيث الذاكرة. حوّل بياناتك دائمًا إلى DMatrix قبل التدريب.
library(xgboost)
library(MASS)
X_train <- as.matrix(Boston[1:400, -14]) # features
y_train <- Boston[1:400, 14] # medv (target)
X_test <- as.matrix(Boston[401:506, -14])
y_test <- Boston[401:506, 14]
dtrain <- xgb.DMatrix(data = X_train, label = y_train)
dtest <- xgb.DMatrix(data = X_test, label = y_test)
cat('DMatrix rows:', nrow(dtrain))xgboost() — التدريب الأساسي
يدرّب xgboost(data, nrounds, eta, max_depth, objective) النموذج. وتشمل المعاملات الأساسية: eta (معدل التعلم؛ الأصغر أكثر متانة لكنه أبطأ)، وmax_depth (عمق الشجرة، الذي يتحكم في تعقيد النموذج)، وnrounds (عدد الأشجار).
params <- list(
objective = 'reg:squarederror',
eta = 0.1, # learning rate
max_depth = 6, # tree depth
subsample = 0.8, # row subsampling
colsample_bytree = 0.8 # column subsampling
)
set.seed(42)
model <- xgboost(
data = dtrain,
params = params,
nrounds = 100,
verbose = 0
)
cat('Model trained with', model$niter, 'rounds')قائمة المراقبة — مراقبة خسارة التحقق
تقبل الوسيطة watchlist قائمةً مسماة من كائنات DMatrix. يقيّم XGBoost الخسارة ويطبعها على كل مجموعة بيانات مدرجة بعد كل جولة تعزيز. استخدمها لتتبع خسارة التدريب مقابل خسارة التحقق واكتشاف بداية فرط التكيّف.
watchlist <- list(train = dtrain, eval = dtest)
model <- xgb.train(
params = params,
data = dtrain,
nrounds = 200,
watchlist = watchlist,
verbose = 1
)
# The log shows train-rmse and eval-rmse per round
# Watch for eval-rmse increasing (overfitting signal)early_stopping_rounds
يوقف early_stopping_rounds = 20 التدريب إذا لم يتحسن مقياس التحقق لمدة 20 جولة متتالية. ويعثر ذلك تلقائيًا على العدد الأمثل من الأشجار، متجنبًا عدم الملاءمة وفرط التكيّف دون ضبط يدوي شامل.
model <- xgb.train(
params = params,
data = dtrain,
nrounds = 1000, # max rounds
watchlist = list(train = dtrain, eval = dtest),
early_stopping_rounds = 20, # stop if no improvement
print_every_n = 50,
verbose = 1
)
cat('Best iteration:', model$best_iteration)
cat('Best eval RMSE:', model$best_score)التصنيف الثنائي
للتصنيف الثنائي، استخدم objective = 'binary:logistic'، الذي ينتج احتمالات متوقعة. يجب أن تكون التسمية رقمية بقيمة 0 أو 1. قيّم النموذج باستخدام AUC أو log-loss عبر المعامل eval_metric.
# Binary classification example
library(MASS)
Pima <- MASS::Pima.tr
X_cl <- as.matrix(Pima[, -8])
y_cl <- as.numeric(Pima$type) - 1 # factor to 0/1
dt_cl <- xgb.DMatrix(data = X_cl, label = y_cl)
mod_cl <- xgboost(
data = dt_cl,
objective = 'binary:logistic',
eval_metric = 'auc',
eta = 0.05,
max_depth = 4,
nrounds = 100,
verbose = 0
)التنبؤات
يعيد predict(model, dtest) قيمًا متوقعة خامًا: احتمالات في التصنيف، أو تنبؤات ذات قيم حقيقية في الانحدار. طبّق عتبة 0.5 لتحويل الاحتمالات إلى تسميات فئات في مهام التصنيف.
# Regression predictions
reg_preds <- predict(model, dtest)
rmse <- sqrt(mean((reg_preds - y_test)^2))
cat('Test RMSE:', round(rmse, 3))
# Classification predictions
prob_preds <- predict(mod_cl, dt_cl)
class_preds <- ifelse(prob_preds > 0.5, 1, 0)
accuracy <- mean(class_preds == y_cl)
cat('Training Accuracy:', round(accuracy, 3))xgb.cv() — التحقق المتقاطع
ينفذ xgb.cv(params, data, nrounds, nfold) تحققًا متقاطعًا من نوع k-fold داخل XGBoost. وهذا أسرع من استخدام rsample لأن XGBoost يتولى التعامل مع الطيات داخليًا. ويعرض الإخراج متوسط المقياس وانحرافه المعياري لكل جولة.
cv_result <- xgb.cv(
params = params,
data = dtrain,
nrounds = 200,
nfold = 5,
early_stopping_rounds = 15,
print_every_n = 20,
verbose = 1
)
# Best nrounds from CV
best_nrounds <- cv_result$best_iteration
cat('Optimal nrounds:', best_nrounds)
# CV RMSE at best iteration
cat('CV RMSE:', cv_result$evaluation_log[best_nrounds, 'test_rmse_mean'][[1]])المعاملات الفائقة الأساسية
أكثر معاملات XGBoost الفائقة تأثيرًا:
eta: معدل التعلم (0.01-0.3). القيمة الأقل تعني الحاجة إلى عدد أكبر من الأشجار، مع متانة أعلى.max_depth: عمق الشجرة (3-10). القيمة الأكبر تعني تعقيدًا أعلى وفرط تكيّف أسرع.subsample: نسبة الصفوف لكل شجرة (0.5-1.0). تقلل فرط التكيّف.colsample_bytree: نسبة الميزات لكل شجرة (0.5-1.0).lambda: تنظيم L2 لأوزان الأوراق.alpha: تنظيم L1 لأوزان الأوراق.
params_tuned <- list(
objective = 'reg:squarederror',
eta = 0.05,
max_depth = 5,
subsample = 0.75,
colsample_bytree = 0.75,
lambda = 1.0, # L2 regularization
alpha = 0.1, # L1 regularization
min_child_weight = 3 # min samples in leaf
)
model_tuned <- xgboost(
data = dtrain, params = params_tuned,
nrounds = best_nrounds, verbose = 0
)حفظ النماذج وتحميلها
يمكن حفظ نماذج XGBoost على القرص بتنسيق ثنائي باستخدام xgb.save(model, 'model.xgb')، ثم إعادة تحميلها باستخدام xgb.load('model.xgb'). ويُعد هذا التنسيق الموصى به للنشر في بيئة الإنتاج، كما يضمن قابلية إعادة الإنتاج بتطابق تام على مستوى البِتّات.
# Save model
xgb.save(model, '/tmp/xgb_boston.xgb')
# Reload and predict
loaded_model <- xgb.load('/tmp/xgb_boston.xgb')
new_preds <- predict(loaded_model, dtest)
# Verify predictions match
all.equal(reg_preds, new_preds) # TRUEالتصنيف متعدد الفئات
للمسائل متعددة الفئات، استخدم objective = 'multi:softprob' واضبط num_class على عدد الفئات. يجب أن تكون التسميات أعدادًا صحيحة مفهرسة بدءًا من 0. ويكون الإخراج مصفوفة من الاحتمالات لكل فئة.
X_mc <- as.matrix(iris[, -5])
y_mc <- as.integer(iris$Species) - 1 # 0, 1, 2
dt_mc <- xgb.DMatrix(data = X_mc, label = y_mc)
params_mc <- list(
objective = 'multi:softprob',
num_class = 3,
eta = 0.1,
max_depth = 3
)
mod_mc <- xgboost(
data = dt_mc, params = params_mc,
nrounds = 50, verbose = 0
)
# Predictions: matrix of shape (n, num_class)
prob_matrix <- matrix(predict(mod_mc, dt_mc), ncol = 3, byrow = TRUE)
head(prob_matrix)تحقق سريع
ما الغرض من ضبط early_stopping_rounds = 20 في xgb.train()؟
مراجعة XGBoost
أهم النقاط من درس التعزيز التدرجي باستخدام XGBoost:
- ينشئ
xgb.DMatrix(data, label)تنسيق البيانات المحسّن لـXGBoost. - المعاملات الأساسية:
eta(معدل التعلم)، وmax_depth، وsubsample، وcolsample_bytree. - تراقب
watchlistخسارة التدريب والتحقق في كل جولة. - تعثر
early_stopping_roundsتلقائيًا على العدد الأمثل من الأشجار. - ينفذ
xgb.cv()تحققًا متقاطعًا من نوع k-fold داخل XGBoost لإجراء بحث سريع عن المعاملات الفائقة. - استخدم
objective = 'binary:logistic'للتصنيف الثنائي، و'multi:softprob'للتصنيف متعدد الفئات. - احفظ النماذج وحمّلها باستخدام
xgb.save()/xgb.load().
# Production XGBoost pipeline
dtrain <- xgb.DMatrix(data = X_train, label = y_train)
dtest <- xgb.DMatrix(data = X_test, label = y_test)
params <- list(objective = 'reg:squarederror',
eta = 0.05, max_depth = 5, subsample = 0.8)
cv <- xgb.cv(params, dtrain, nrounds = 500, nfold = 5,
early_stopping_rounds = 20, verbose = 0)
model <- xgboost(data = dtrain, params = params,
nrounds = cv$best_iteration, verbose = 0)
preds <- predict(model, dtest)
cat('RMSE:', sqrt(mean((preds - y_test)^2)))الأسئلة الشائعة
هل درس «التعزيز التدرجي باستخدام xgboost» مجاني؟
نعم — نص درس «التعزيز التدرجي باستخدام xgboost» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «التعزيز التدرجي باستخدام xgboost»؟
اضبط معاملات xgboost والإيقاف المبكر وجداول معدل التعلم تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التعزيز التدرجي باستخدام xgboost»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- أشجار القرار: أساس النماذج التجميعية
- الغابات العشوائية باستخدام ranger
- التعزيز التدرجي باستخدام xgboost
- أهمية السمات وتفسير النماذج