ML Learning Hub
طرق المجموعةمتوسط

التعزيز التدريجي: XGBoost وLightGBM وCatBoost

تصحيحات صغيرة متتالية تتفوق على تخمين واحد كبير — ملاحقة البواقي بالتسلسل

من Gradient Boosting الأساسي إلى XGBoost وLightGBM وCatBoost. تحسين من الرتبة الثانية وتجزئة بالمدرج ونمو من الأوراق وأنماط Optuna HPO.

60 min
18 مخططات
6 المفاهيم المغطاة

المتطلبات الأساسية

Decision Trees
Calculus & Optimization

المفاهيم المغطاة

ResidualsTree Score (SSR+λT)Histogram BinningLeaf-wise GrowthOrdered BoostingOptuna HPO

الصيغ الرئيسية

مجموعة تعزيز

التنبؤ النهائي = مجموع M متعلم ضعيف، مرجَّح بـγ — كل شجرة تصحح أخطاء السابقة

شبه البواقي

التدرج السلبي للخسارة — ما يجب على الشجرة التالية تعلمه لتقليل الخطأ

نقاط شجرة XGBoost

مكسب تقسيم (G = مجموع المشتقات الأولى، H = مجموع المشتقات الثانية) — تعظيم هذا يختار أفضل تقسيم

مكسب التقسيم

تحسين الهدف من تقسيم ورقة إلى اثنتين — يُستخدم للتشذيب ومعيار التوقف

محاكاة تفاعلية

Loading visualization…
Loading visualization…

هندسة النموذج

Loading visualization…
Loading visualization…
Loading visualization…
Loading visualization…
🎯

لماذا يهيمن تعزيز التدرج على البيانات الجدولية

motivation

منذ عام 2014، فازت أساليب تعزيز التدرج (XGBoost, LightGBM, CatBoost) بغالبية مسابقات Kaggle على البيانات المنظمة. إنها أفضل خوارزمية للتعلم الآلي الجدولي: تتعامل مع الأنواع المختلطة أصلياً، لا تتطلب تحجيماً، تلتقط التفاعلات غير الخطية المعقدة، وتأتي مع تنظيم مدمج.

💡

الفكرة الأساسية: تعلم الأخطاء

intuition

افترض أن نموذجك الحالي يتنبأ بأسعار المنازل ويُخطئ بـ50,000 درس في المنزل أ. بدلاً من إعادة التدريب من الصفر، درّب شجرة صغيرة جديدة للتنبؤ بتلك الـ50,000 تحديداً. أضفها إلى نموذجك. الآن أنت تُخطئ بأقل. كرر. كل شجرة جديدة تستهدف أخطاء البقايا لجميع الأشجار السابقة مجتمعة.

'التدرج' في تعزيز التدرج يشير إلى الانحدار التدرجي الدالي، ليس الانحدار التدرجي المعاملي. نُحسّن في فضاء الدوال، ليس الأوزان.

تعزيز التدرج كانحدار تدرجي في فضاء الدوال

math

في الخطوة m، نُلائم شجرة hₘ على التدرج السلبي للخسارة بالنسبة للتنبؤ الحالي F_{m-1}(x). لخسارة MSE ، التدرج السلبي هو بالضبط البقية r = y − F(x). لخسائر أخرى (log loss، MAE)، نحصل على 'شبه بواقٍ' مختلفة — ومن هنا عمومية الإطار.

قاعدة التحديث (ν = معامل التقليص / معدل التعلم)
🔬

XGBoost: تحسين الرتبة الثانية

deepdive

GBM الأصلي لفريدمان يستخدم فقط تدرجات الرتبة الأولى (البواقي). XGBoost يستخدم كلاً من الرتبة الأولى (G) والثانية (H) من توسيع تايلور للخسارة، مما يمنحه معلومات انحناء أفضل — كطريقة نيوتن مقابل الانحدار التدرجي.

دالة الهدف المنظَّمة لـXGBoost (توسيع تايلور)
⚖️

XGBoost مقابل LightGBM مقابل CatBoost

comparison

Three major frameworks, each with distinct architectural innovations:

1

XGBoost: نمو على مستوى الطبقة + تحسين الرتبة الثانية. أبطأ لكن ناضج. الأفضل لمجموعات البيانات الصغيرة/المتوسطة.

2

LightGBM: نمو على مستوى الأوراق + التجزئة بالمدرّج. أسرع 10-20× في التدريب. الأفضل لمجموعات البيانات الكبيرة.

3

CatBoost: boost مرتب لتجنب تسرب الهدف. معالجة أصلية للفئوية. الأفضل مع كثير من الميزات الفئوية.

4

قاعدة عامة: ابدأ بـLightGBM. استخدم CatBoost مع فئويات ثقيلة. XGBoost لمجموعات البيانات الصغيرة حيث السرعة لا تهم.

⚙️

نمو LightGBM من الأوراق

algorithm
1

تهيئة F₀(x) = log(p/(1-p)) للتصنيف الثنائي

2

لـm من 1 إلى M:

حساب شبه البواقي rᵢ = -∂L/∂F(xᵢ)|_{F=F_{m-1}}

إيجاد أفضل ورقة للتقسيم (عالمياً، ليس مستوى بمستوى)

حساب قيم الأوراق: γⱼ = ΣᵢGᵢ / (ΣᵢHᵢ + λ)

التحديث: F_m(x) = F_{m-1}(x) + ν · γ_{ورقة(x)}

إضافة توقف مبكر إذا توقف تحسن خسارة التحقق

</>

LightGBM في الإنتاج مع Optuna

code
python37 lines
import lightgbm as lgb
import optuna
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

class="tok-comment"># ── Sample data ────────────────────────────────────────────────────────
X, y = make_classification(n_samples=class="tok-num">1000, n_features=class="tok-num">20,
                            n_informative=class="tok-num">10, random_state=class="tok-num">42)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42)
dtrain = lgb.Dataset(X_train, label=y_train)

def objective(trial):
    params = {
        class="tok-str">'objective': class="tok-str">'binary',
        class="tok-str">'metric': class="tok-str">'auc',
        class="tok-str">'learning_rate': trial.suggest_float(class="tok-str">'lr', class="tok-num">0.01, class="tok-num">0.3, log=True),
        class="tok-str">'num_leaves': trial.suggest_int(class="tok-str">'num_leaves', class="tok-num">20, class="tok-num">300),
        class="tok-str">'max_depth': trial.suggest_int(class="tok-str">'max_depth', class="tok-num">3, class="tok-num">12),
        class="tok-str">'min_data_in_leaf': trial.suggest_int(class="tok-str">'min_child', class="tok-num">10, class="tok-num">100),
        class="tok-str">'feature_fraction': trial.suggest_float(class="tok-str">'feat_frac', class="tok-num">0.4, class="tok-num">1.0),
        class="tok-str">'bagging_fraction': trial.suggest_float(class="tok-str">'bag_frac', class="tok-num">0.4, class="tok-num">1.0),
        class="tok-str">'lambda_l1': trial.suggest_float(class="tok-str">'l1', class="tok-num">1e-8, class="tok-num">10.0, log=True),
        class="tok-str">'lambda_l2': trial.suggest_float(class="tok-str">'l2', class="tok-num">1e-8, class="tok-num">10.0, log=True),
        class="tok-str">'verbose': -class="tok-num">1,
    }
    cv_result = lgb.cv(
        params, dtrain, nfold=class="tok-num">5,
        num_boost_round=class="tok-num">500,
        early_stopping_rounds=class="tok-num">50,
        stratified=True
    )
    return max(cv_result[class="tok-str">'valid auc-mean'])

study = optuna.create_study(direction=class="tok-str">'maximize')
study.optimize(objective, n_trials=class="tok-num">100)

?اختبار المعرفة

يتم حفظ التقدم في متصفحك — لا حاجة لحساب.

تحتاج مهندس ذكاء اصطناعي أو عالم بيانات؟

أبني نماذج تعلم آلي مخصصة، ووكلاء ذكاء اصطناعي، ورؤية حاسوب، وأتمتة — من الفكرة إلى الإنتاج.