التحزيم والتعزيز والتكديس
“حكمة الحشود المتنوعة — دمج نماذج غير مثالية في شيء أقوى من أي نموذج منفرد”
شرح بصري لجميع نماذج المجموعة — bagging يُقلل التباين وboosting يُقلل التحيز وstacking يجمع التنبؤات عبر مُتعلم ميتا.
المتطلبات الأساسية
المفاهيم المغطاة
∑الصيغ الرئيسية
التحيز-التباين للمجموعة
تباين المجموعة يتقلص بتخفيض الارتباط ρ بين النماذج — التنوع = تقليل التباين
وزن AdaBoost
وزن أعلى للمتعلمين الضعفاء الأكثر دقة — المتعلمون ذوو الخطأ المنخفض يهيمنون على المجموعة
مدخلات ميتا التكديس
تنبؤات النماذج الأساسية خارج الطوق تُغذِّي المتعلم الميتا — المدخل الصحيح الوحيد للتكديس
▶محاكاة تفاعلية
⬡هندسة النموذج
لماذا تفوز المجموعات في Kaggle
تستخدم أفضل حل في كل مسابقة Kaggle تقريباً المجموعات. النماذج الفردية لها أخطاء لا يمكن تقليلها — بعض العينات صعبة على نماذج الأشجار، وأخرى على الشبكات العصبية. بدمج تنبؤات النماذج المتنوعة، تتلاشى الأخطاء. النتيجة تتفوق باستمرار على أي نموذج منفرد.
نماذج المجموعة الثلاثة
Bagging (التجميع بالتشغيل التمهيدي): تدريب K نموذج على K مجموعة فرعية عشوائية → متوسط/تصويت. يقلل التباين. الغابة العشوائية هي bagging. Boosting: تدريب K نموذج بشكل تسلسلي، كل منها يُصلح أخطاء السابق → تركيبة موزونة. يقلل التحيز. XGBoost هو boosting. Stacking: تدريب K نموذج أساسي متنوع، واستخدام تنبؤاتها كميزات لمتعلم فوقي.
الفكرة الأساسية: المجموعات تعمل لأن النماذج متنوعة. مجموعة bagging من نماذج متطابقة لها نفس أداء نموذج واحد بالضبط. التنوع = عدم الترابط = تخفيض التباين.
التكديس بالتنبؤات الخارجية
تعريف K نموذج أساسي متنوع (LightGBM، XGBoost، CatBoost، شبكة عصبية، إلخ)
لكل نموذج أساسي، تشغيل التحقق المتقاطع بـ5 أضعاف
جمع التنبؤات خارج الضعف (OOF) — تُشكل عموداً في مصفوفة الميزات الفوقية
تكديس K عمود لتشكيل مصفوفة الميزات الفوقية Ñ ∈ ℝ^{n×K}
تدريب المتعلم الفوقي (الانحدار اللوجستي أو LightGBM) على Ñ مع الهدف y
للاختبار: متوسط تنبؤات النماذج الأساسية عبر الأضعاف، إطعام المتعلم الفوقي
تنفيذ التكديس في الإنتاج
import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.model_selection import StratifiedKFold from sklearn.metrics import roc_auc_score def stack_oof(models, X_train, y_train, X_test, n_folds=class="tok-num">5): class="tok-str">"""Returns OOF predictions + test predictions for all models.""" skf = StratifiedKFold(n_splits=n_folds, shuffle=True, random_state=class="tok-num">42) oof_preds = np.zeros((len(X_train), len(models))) test_preds = np.zeros((len(X_test), len(models))) for m_idx, model in enumerate(models): fold_test_preds = np.zeros((len(X_test), n_folds)) for f_idx, (tr, val) in enumerate(skf.split(X_train, y_train)): model.fit(X_train[tr], y_train[tr]) oof_preds[val, m_idx] = model.predict_proba(X_train[val])[:,class="tok-num">1] fold_test_preds[:, f_idx] = model.predict_proba(X_test)[:,class="tok-num">1] test_preds[:, m_idx] = fold_test_preds.mean(axis=class="tok-num">1) print(fclass="tok-str">"Model {m_idx} OOF AUC: {roc_auc_score(y_train, oof_preds[:,m_idx]):.4f}") class="tok-comment"># Meta-learner on OOF predictions meta = LogisticRegression(C=class="tok-num">0.1) meta.fit(oof_preds, y_train) final_preds = meta.predict_proba(test_preds)[:,class="tok-num">1] return final_preds, meta.coef_
?اختبار المعرفة
يتم حفظ التقدم في متصفحك — لا حاجة لحساب.