XGBoost: التنظيم والإيقاف المبكر وأهمية السمات
درّب XGBClassifier، وفعّل الإيقاف المبكر على مجموعة تحقق، وارسم درجات أهمية السمات لتحديد الأعمدة الأكثر قدرة على التنبؤ
XGBoost: التنظيم والإيقاف المبكر وأهمية السمات درس مجاني في Machine Learning Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Machine Learning Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Machine Learning Academy 4 دروس في المجموع.
ما هو XGBoost؟
يُعد XGBoost (التعزيز المتدرج الفائق) مكتبة محسّنة بدرجة كبيرة للتعزيز المتدرج، وقد هيمنت على مسابقات Kaggle منذ عام 2014 فصاعدًا. وهي تحسن GradientBoostingClassifier في scikit-learn بثلاث طرق رئيسية: (1) تنظيم L1 وL2 مضمّن لأوزان الأشجار لتقليل فرط التكيّف، (2) توسعة تايلور من الرتبة الثانية للخسارة للحصول على تقديرات أدق للتدرج، و(3) خوارزمية فعّالة جدًا للعثور على نقاط الانقسام باستخدام المدرج التكراري التقريبي، وقابلة للتوسع لتتعامل مع مجموعات بيانات تضم ملايين الصفوف.
تثبيت XGBoost واستيراده
تُعد XGBoost مكتبة مستقلة تُثبَّت منفصلة عن scikit-learn. وهي توفر واجهة برمجية متوافقة مع sklearn من خلال XGBClassifier وXGBRegressor، لذا يمكنك استخدامها مع cross_val_score وGridSearchCV وخطوط الأنابيب، تمامًا مثل أي مقدِّر في scikit-learn. وتستخدم واجهة XGBoost الأصلية xgb.DMatrix وxgb.train()، مما يوفر تحكمًا أكثر دقة في الإيقاف المبكر والأهداف المخصصة.
# Install: pip install xgboost
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = xgb.XGBClassifier(n_estimators=200, learning_rate=0.1, max_depth=3,
use_label_encoder=False, eval_metric='logloss', random_state=42)
model.fit(X_train, y_train)
print('XGBoost test accuracy:', model.score(X_test, y_test))تنظيم XGBoost: lambda وalpha
يوفر XGBoost حدَّي تنظيم: reg_lambda (عقوبة L2 على أوزان الأوراق، وقيمتها الافتراضية=1) وreg_alpha (عقوبة L1 على أوزان الأوراق، وقيمتها الافتراضية=0). يعمل تنظيم L2 على تقليص أوزان الأوراق بسلاسة نحو الصفر، بينما يمكن لـ L1 ضبط بعض أوزان الأوراق إلى الصفر تمامًا (مما ينتج بنية شجرية متناثرة). ويقلل كلاهما فرط التكيّف في مجموعات البيانات المشوشة. إضافةً إلى ذلك، تفرض min_child_weight حدًا أدنى لمجموع أوزان الحالات في العقدة الابنة قبل إجراء الانقسام، فتعمل مثل قيد الحد الأدنى لعدد العينات في الورقة.
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
for lam in [0, 1, 5, 10]:
model = xgb.XGBClassifier(n_estimators=100, reg_lambda=lam, eval_metric='logloss',
random_state=42, verbosity=0)
score = cross_val_score(model, X, y, cv=5).mean()
print(f'reg_lambda={lam:3d}: CV accuracy={score:.4f}')الإيقاف المبكر: توقف عند توقف التحسن
يراقب الإيقاف المبكر مقياس تحقق بعد كل جولة من جولات التعزيز، ويوقف التدريب عندما لا يتحسن المقياس لعدد محدد من الجولات (early_stopping_rounds). ويمنع ذلك فرط التكيّف ويوفر الموارد الحسابية — إذ يمكنك ضبط n_estimators على قيمة مرتفعة جدًا بأمان (مثلًا 1000)، وترك الإيقاف المبكر يحدد العدد الأمثل من الجولات. وتُخزَّن أفضل جولة في model.best_iteration، وتُستخدم تلقائيًا في التنبؤات.
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)
model = xgb.XGBClassifier(n_estimators=1000, learning_rate=0.05, max_depth=3,
eval_metric='logloss', verbosity=0, random_state=42)
model.fit(X_train, y_train,
eval_set=[(X_val, y_val)],
early_stopping_rounds=20,
verbose=False)
print('Best iteration:', model.best_iteration)
print('Test accuracy:', model.score(X_val, y_val))أهمية الميزات في XGBoost
يوفر XGBoost ثلاثة أنواع من أهمية الميزات: 'weight' (عدد مرات استخدام الميزة في الانقسامات)، و'gain' (متوسط التحسن في الخسارة عند استخدام الميزة للانقسام — وهو عادةً النوع الأكثر إفادة)، و'cover' (متوسط عدد العينات المتأثرة بالانقسامات على ميزة ما). ويمكن الوصول إليها عبر model.feature_importances_ (ويستخدم gain افتراضيًا في واجهة sklearn API) أو model.get_booster().get_score(importance_type='gain').
import xgboost as xgb
import pandas as pd
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X, y = data.data, data.target
model = xgb.XGBClassifier(n_estimators=100, eval_metric='logloss', random_state=42)
model.fit(X, y)
importances = pd.Series(model.feature_importances_, index=data.feature_names)
print(importances.sort_values(ascending=False).head(5))رسم أهمية الميزات
تتضمن XGBoost أداة رسم مضمّنة هي xgb.plot_importance(model)، تنشئ مخططًا شريطيًا أفقيًا لأهمية الميزات. ولمزيد من التخصيص، استخدم Series الناتجة من model.feature_importances_ وارسمها باستخدام matplotlib. وتُحسب أهمية الميزات في التعزيز بطريقة مختلفة عن الغابات العشوائية — فهي تعكس مقدار مساهمة كل ميزة في تقليل الخسارة عبر جميع الأشجار، مع ترجيحها وفق تكرار الاستخدام أو متوسط الكسب.
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
import matplotlib.pyplot as plt
data = load_breast_cancer()
model = xgb.XGBClassifier(n_estimators=100, eval_metric='logloss', random_state=42)
model.fit(data.data, data.target)
# xgb.plot_importance(model, max_num_features=10) # uncomment in Jupyter
# plt.show()
print('Top feature:', data.feature_names[model.feature_importances_.argmax()])معلمات أخذ العينات الفرعية في XGBoost
يوفّر XGBoost ثلاث معلمات لأخذ عينات فرعية لتحقيق تنظيم إضافي: subsample (نسبة صفوف التدريب المستخدمة لكل شجرة، مثلًا 0.8)، وcolsample_bytree (نسبة السمات المستخدمة لكل شجرة، مثلًا 0.8)، وcolsample_bylevel (نسبة السمات المستخدمة في كل مستوى من مستويات العمق). وتُدخل هذه المعلمات مجتمعةً عشوائيةً مشابهةً لأخذ عينات فرعية من السمات في الغابات العشوائية، مما يقلل الارتباط بين الأشجار. قيم البدء المعتادة: subsample=0.8 وcolsample_bytree=0.8.
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
model = xgb.XGBClassifier(
n_estimators=200,
learning_rate=0.1,
max_depth=4,
subsample=0.8,
colsample_bytree=0.8,
reg_lambda=2,
eval_metric='logloss',
random_state=42
)
print('XGBoost with subsampling CV:', cross_val_score(model, X, y, cv=5).mean().round(4))XGBoost للانحدار
يستخدم XGBRegressor المحرك نفسه، لكنه يحسّن دالة خسارة للانحدار (الخطأ التربيعي افتراضيًا، أو Tweedie أو gamma أو quantile وغير ذلك). ويعمل الإيقاف المبكر باستخدام مقياس انحدار (مثل RMSE) بالطريقة نفسها تمامًا. ويتميز XGBoost بقدرته التنافسية خصوصًا في مهام الانحدار على البيانات الجدولية، لأنه يتعامل مع القيم المفقودة أصليًا (إذ يتعلم أفضل اتجاه لإرسال العقد ذات القيم المفقودة أثناء بناء الشجرة)، كما يدعم قيود الرتابة للعلاقات الخاصة بالمجال بين السمات.
import xgboost as xgb
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = fetch_california_housing(return_X_y=True)
model = xgb.XGBRegressor(n_estimators=200, learning_rate=0.1, max_depth=4,
subsample=0.8, eval_metric='rmse', random_state=42)
rmse = np.sqrt(-cross_val_score(model, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print('XGBoost Regression RMSE:', round(rmse, 4))XGBoost مع التحقق المتقاطع وGridSearch
بما أن XGBClassifier يطبّق واجهة مقدّر scikit-learn، فإنه يعمل بسلاسة مع GridSearchCV. وأكثر المعلمات الفائقة تأثيرًا التي ينبغي ضبطها هي learning_rate وn_estimators (مع الإيقاف المبكر) وmax_depth وsubsample وcolsample_bytree. وتعمل استراتيجية من خطوتين جيدًا: اضبط أولًا معدل تعلم منخفضًا (0.05) وقيمة n_estimators مرتفعة مع الإيقاف المبكر للعثور على العدد المناسب من الأشجار، ثم نفّذ بحثًا شبكيًا في المعلمات الأخرى مع تثبيت عدد الأشجار الذي عثرت عليه.
معالجة القيم المفقودة في XGBoost
يتعامل XGBoost أصليًا مع القيم المفقودة (NaN) من دون الحاجة إلى التعويض. أثناء بناء الشجرة، عندما تكون إحدى السمات مفقودة لبعض أمثلة التدريب، يجرّب XGBoost كلا الاتجاهين (العقدة الابنة اليسرى أو اليمنى) للقيم المفقودة، ويختار الاتجاه الذي يزيد الكسب إلى أقصى حد. ويُخزَّن الاتجاه المتعلم في الشجرة ويُطبَّق عند التنبؤ. ويمثل ذلك ميزة مهمة مقارنةً بنماذج scikit-learn التي تتطلب تعويضًا صريحًا قبل الملاءمة.
المعالجة المتوازية والسرعة في XGBoost
على الرغم من بناء الأشجار بالتتابع، يوازي XGBoost تنفيذ خطوة العثور على التقسيم داخل كل شجرة؛ إذ يقيّم جميع التقسيمات المرشحة عبر السمات كافةً في الوقت نفسه باستخدام عدة خيوط لوحدة المعالجة المركزية. اضبط n_jobs=-1 (أو nthread في الواجهة البرمجية الأصلية) لاستخدام جميع الأنوية المتاحة. ولتسريع التنفيذ باستخدام GPU، ثبّت الإصدار المُمكّن لـ CUDA واضبط device='cuda'. على وحدة GPU حديثة، يمكن أن يكون XGBoost أسرع من CPU بمقدار يتراوح بين 5 و50 مرة لمجموعات البيانات الكبيرة، مما يجعله عمليًا لمجموعات البيانات التي تضم ملايين الصفوف.
import xgboost as xgb
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import cross_val_score
import numpy as np
X, y = fetch_california_housing(return_X_y=True)
# Use all CPU threads
model_parallel = xgb.XGBRegressor(n_estimators=100, n_jobs=-1, eval_metric='rmse',
verbosity=0, random_state=42)
rmse = np.sqrt(-cross_val_score(model_parallel, X, y, scoring='neg_mean_squared_error', cv=3).mean())
print('XGBoost parallel RMSE:', round(rmse, 4))اختبار سريع
اختبر مدى فهمك لميزات XGBoost التي تناولها هذا الدرس.
مراجعة الدرس
تعلّمت في هذا الدرس أن: XGBoost يضيف تنظيم L1/L2 وتدرجات من الرتبة الثانية إلى التعزيز التدريجي القياسي، وأن الإيقاف المبكر يمنع فرط التكيّف من خلال مراقبة مقياس تحقق أثناء التدريب، وأن أهمية السمة يمكن قياسها بالوزن أو الكسب أو التغطية عبر جميع الأشجار. بعد ذلك، سنستكشف استراتيجية النمو من الأوراق في LightGBM ومزاياها من حيث السرعة.
تعلم Python مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 30
- الدروس
- 120
الأسئلة الشائعة
هل درس «XGBoost: التنظيم والإيقاف المبكر وأهمية السمات» مجاني؟
نعم — نص درس «XGBoost: التنظيم والإيقاف المبكر وأهمية السمات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Machine Learning Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Machine Learning Academy 4 دروس في المجموع.
ماذا ستتعلم في «XGBoost: التنظيم والإيقاف المبكر وأهمية السمات»؟
درّب XGBClassifier، وفعّل الإيقاف المبكر على مجموعة تحقق، وارسم درجات أهمية السمات لتحديد الأعمدة الأكثر قدرة على التنبؤ تتمرن على Machine Learning Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Machine Learning Academy؟
لا تُشترط خبرة سابقة. Machine Learning Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «XGBoost: التنظيم والإيقاف المبكر وأهمية السمات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Machine Learning Academy هذا؟
نعم. كل درس في Machine Learning Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حدس Boosting: تصحيح الأخطاء تسلسليًا
- XGBoost: التنظيم والإيقاف المبكر وأهمية السمات
- LightGBM: النمو ورقيًا ومزايا السرعة
- المعلمات الفائقة الأساسية: Learning Rate وn_estimators وmax_depth