أساسيات تعلم الآلة1996مبتدئ10 دقيقة قراءة
تكييس المتنبِّئات
Bagging Predictors
Breiman, L. — Machine Learning
المشكلة
شجرة القرار المفردة نموذج مرن وقادر على التقاط أنماط معقدة، لكنها في الوقت نفسه هشّة للغاية: يكفي أن تحذف بضع عيّنات من بيانات أو تُدخل قليلاً من الضجيج حتى تحصل على شجرة مختلفة تماماً. هذه الهشاشة تعني أن تباين النموذج مرتفع — فبدلاً من أن يتعلّم النمط الحقيقي في البيانات، يحفظ التفاصيل العارضة لمجموعة التدريب التي صادف أنه رآها. حتى عام 1996 لم تكن هناك طريقة منهجية وعامة لترويض هذا دون التضحية بالقدرة التعبيرية التي تجعل الأشجار أداة قوية من الأساس.
الإسهام
التجميع بالتمهيد (التكييس): اسحب B عيّنة تمهيدية من مجموعة التدريب (كل واحدة بالحجم نفسه، مسحوبة مع الإعادة)، ودرِّب متنبِّئاً مستقلاً على كل واحدة، ثم احسب المتوسط في حالة الانحدار أو أجرِ تصويتاً بالأغلبية في حالة . أثبت بريمان رياضياً أن هذا التجميع يُخفّض دائماً عند التعامل مع متنبِّئات غير مستقرة، وحقّق انخفاضاً يتراوح بين 20% و47% في معدلات التصنيف الخاطئ على مجموعات بيانات حقيقية، كما قدّم تقدير خارج الكيس — وهو درجة تحقّق مجانية لا تحتاج إلى مجموعة اختبار منفصلة.
الأثر
التكييس هو الأب الفكري لـالغابات العشوائية (بريمان، 2001) ويمثّل نصف عُدّة إدارة التوازن بين الانحياز والتباين، بينما يمثّل التعزيز النصف الآخر. أثبتت هذه الورقة أن دمج متعلّمين ضعاف وغير مستقرين يمكن أن ينافس أو يتفوق على نماذج مفردة صُمِّمت بعناية فائقة. واليوم كل تجميعة قائمة على الأشجار — الغابة العشوائية وExtra-Trees وحتى الجولات الأولى من التعزيز التدريجي — تعود في مبدأ تخفيض التباين إلى هذه الورقة.
تخيّل أنك تحاول تخمين عدد حبّات الحلوى في جرّة. تخمين شخص واحد قد يكون بعيداً عن الصواب — ربما أخطأ في تقدير عمق الجرّة أو حجم الحبّات. لكن لو سألت خمسين شخصاً وحسبت المتوسط، ستجد أن الأخطاء — بعضها بالزيادة وبعضها بالنقصان — يُلغي بعضها بعضاً، ويقترب المتوسط من الحقيقة بشكل مُدهش.
يطبّق الفكرة ذاتها على نماذج . بدلاً من الاعتماد على واحدة ربما حفظت تفاصيل عارضة في البيانات، نُنشئ خمسين مجموعة تدريب تختلف قليلاً عن بعضها، ونبني شجرة مستقلة على كل واحدة، ثم نأخذ متوسط إجاباتها. كل شجرة تُفرط في تعلّم جزء مختلف من الضجيج، لكنّ المتوسط يُنعّم هذه الاختلافات ويُنتج تنبؤاً أدق بكثير.
المشكلة: شجرة واحدة وأشكال محتملة لا تُحصى
أشجار القرار أداة قوية لأنها قادرة على رسم معقدة وغير خطية دون أي افتراضات مسبقة عن توزيع البيانات. لكنّ هذه المرونة لها ثمن: عدم الاستقرار. يكفي أن تحذف بضع عيّنات من بيانات التدريب حتى تنقسم الشجرة على متغيرات مختلفة تماماً وتُعطيك تنبؤات مغايرة كلياً.
هذا هو جانب التباين في . الشجرة العميقة منخفض — بمعنى أنها تستطيع تمثيل أي نمط تقريباً — لكنّ تباينها مرتفع لأنها تتعلّم الضجيج مع الإشارة. يُخفّف المشكلة، لكنّ الهشاشة الجوهرية تبقى: الشجرة حسّاسة أكثر من اللازم لمجموعة التدريب التي صادف أنها تدرّبت عليها.
التمهيد: كيف نصنع مجموعات بيانات متعددة من مجموعة واحدة
الوضع المثالي هو أن نجمع عدة مجموعات تدريب مستقلة من العالم الحقيقي، وندرّب نموذجاً على كل واحدة، ثم نحسب المتوسط. لكن في الواقع لا نملك سوى مجموعة واحدة. حيلة إحصائية أنيقة تُحاكي وجود مجموعات متعددة: نسحب عيّنة مع الإعادة من أصل عيّنة تدريب. بعض العيّنات ستتكرر أكثر من مرة، وبعضها لن يظهر إطلاقاً.
في المتوسط، تحتوي كل على نحو 63.2% من العيّنات الأصلية الفريدة، والباقي نُسَخ مكررة. أما الـ36.8% التي لم تُسحب في جولة معيّنة فتُسمّى عيّنات — وسنرى لاحقاً أنها تتحول إلى مجموعة تحقّق مجانية دون أي جهد إضافي.
الخوارزمية: مهِّد، درِّب، جمِّع
التكييس بسيط وأنيق — ثلاث خطوات تتكرر مرة، ثم خطوة تجميع في النهاية:
الخطوة 1 — التمهيد. اسحب عيّنة بحجم مع الإعادة من مجموعة التدريب .
الخطوة 2 — التدريب. ابنِ متنبِّئاً كاملاً غير مقلَّم على كل عيّنة تمهيدية. لا حاجة لأي — نحن نريد لكل شجرة أن تُفرط في التعلّم حتى يبقى انحياز المجموعة منخفضاً.
الخطوة 3 — التجميع. ادمج المتنبِّئات الـ: بحساب المتوسط في ، أو بتصويت الأغلبية في التصنيف.
لماذا ينجح التكييس: حساب المتوسط يخفض التباين
الأساس النظري أنيق. لنتأمّل الحالة المثالية: نفترض أن لدينا عدداً لا نهائياً من مجموعات التدريب المستقلة، كلها مسحوبة من التوزيع الحقيقي . نُعرِّف المتنبئ المُجمَّع كالتالي:
أثبت بريمان متراجحة محورية مستعيناً بمتراجحة يِنسِن، ومفادها أنه لأي متنبئ يُقاس بمربع الخطأ، فإن المتنبئ المُجمَّع يكون دائماً بجودة المتنبئ المفرد المتوسط على الأقل:
تحقّق مجّاني: تقدير خارج الكيس
كل عيّنة تمهيدية تستبعد نحو 36.8% من عيّنات التدريب. هذه العيّنات المُستبعَدة لم ترها تلك الشجرة قطّ، وبالتالي يمكن استخدامها كمجموعة اختبار غير منحازة لها. الفكرة كالتالي: لكل عيّنة تدريب ، نجمع التنبؤات فقط من الأشجار التي لم تشملها عيّنتها التمهيدية، ثم نحسب متوسطها. ما نحصل عليه هو تقدير خطأ خارج الكيس — تقدير شبه غير منحاز لخطأ الاختبار لا يحتاج منفصلة ولا .
تقدير خارج الكيس من أكثر إسهامات التكييس قيمةً من الناحية العملية. يمنحك تقديراً موثوقاً للخطأ «مجاناً» أثناء التدريب، وهذا يجعل التكييس خياراً مناسباً بشكل خاص حين تكون البيانات المتاحة محدودة.
النتائج التجريبية: تخفيض في الخطأ بين 20% و47%
اختبر بريمان التكييس مع أشجار التصنيف على سبع مجموعات بيانات، ومع أشجار الانحدار على خمس مجموعات. وكانت النتائج لافتة: التكييس خفّض معدلات التصنيف الخاطئ بنسبة تتراوح بين 20% و47% في جميع معايير التصنيف، وخفّض متوسط مربع الخطأ بنسبة تتراوح بين 22% و46% في الانحدار. أكبر المكاسب جاءت من مجموعات البيانات التي كانت فيها الأشجار المفردة أشد تقلّباً.
ولعل أبلغ تجربة ضابطة كانت تكييس أقرب k جيران — وهو أسلوب مستقر بطبيعته. وكما تتوقع النظرية تماماً، لم تتغير معدلات التصنيف الخاطئ قبل التكييس ولا بعده. السبب ببساطة أن الخوارزمية لم يكن لديها تباين زائد لتخفّضه.
كم عيّنة تمهيدية نحتاج؟
اختبر بريمان التكييس بـ10 و25 و50 و100 شجرة على مجموعة بيانات الموجة المحاكاة. بعشر أشجار فقط تحقّق الجزء الأكبر من التحسّن (خطأ 21.8% مقابل 29.0% للشجرة المفردة). وعند 25 شجرة انخفض الخطأ إلى 19.5%، ولم تُضف 50 أو 100 شجرة أي تحسّن يُذكر بعد ذلك (19.4%).
الرسالة العملية هنا واضحة: التكييس يتقارب بسرعة. على خلاف حيث قد تؤدي إضافة جولات جديدة إلى ، فإن زيادة عدد الأشجار في التكييس لا تضرّ أبداً — كل ما هنالك أن التحسّن يتوقف بعد نقطة معيّنة. العوائد تصل إلى مرحلة ثبات لكنها لا تنعكس.
الخوارزمية في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from collections import Counter
def bootstrap_sample(X, y, rng):
"""اسحب N عيّنة مع الإعادة من (X, y)."""
n = len(X)
indices = rng.choice(n, size=n, replace=True)
return X[indices], y[indices], indices
def bagging_predict_regression(X_train, y_train, X_test, B=50, seed=42):
"""درِّب B شجرة على عيّنات تمهيدية واحسب متوسط التنبؤات."""
rng = np.random.default_rng(seed)
predictions = np.zeros((B, len(X_test)))
for b in range(B):
X_boot, y_boot, _ = bootstrap_sample(X_train, y_train, rng)
tree = DecisionTreeRegressor()
tree.fit(X_boot, y_boot)
predictions[b] = tree.predict(X_test)
return predictions.mean(axis=0) # المتوسط على B شجرة
def bagging_predict_classification(X_train, y_train, X_test, B=50, seed=42):
"""درِّب B شجرة على عيّنات تمهيدية ثم صوِّت بالأغلبية."""
rng = np.random.default_rng(seed)
all_preds = []
for b in range(B):
X_boot, y_boot, _ = bootstrap_sample(X_train, y_train, rng)
tree = DecisionTreeClassifier()
tree.fit(X_boot, y_boot)
all_preds.append(tree.predict(X_test))
# تصويت الأغلبية لكل عيّنة اختبار
all_preds = np.array(all_preds) # (B, n_test)
final = []
for i in range(len(X_test)):
votes = Counter(all_preds[:, i])
final.append(votes.most_common(1)[0][0])
return np.array(final)
# هذا هو التكييس. الغابة العشوائية تُضيف لمسة واحدة: عند كل انقسام
# لا يُنظر إلا في مجموعة عشوائية من السمات، مما يُفقد الأشجار
# ارتباطها ببعضها ويُتيح تخفيضاً إضافياً للتباين.ما لا يستطيعه التكييس
التكييس يُخفّض التباين لكنه لا يُخفّض الانحياز. لو أن كل شجرة تُخطئ النمط الحقيقي بالطريقة نفسها بشكل منهجي — مثلاً لأن صنف النموذج بسيط أكثر من اللازم فتقع كل الأشجار في — فإن حساب متوسطها لن يحلّ المشكلة.
هنا يتجلّى الفرق الجوهري بين التكييس و. التعزيز يُركّز كل نموذج جديد على أخطاء سابقه، فيُخفّض الانحياز خطوة بخطوة. أما التكييس فيبني نماذج مستقلة بالتوازي ويُخفّض التباين. كلاهما أسلوب ، لكنهما يُعالجان جانبين مختلفين من الخطأ.
وهناك قيد آخر: . الشجرة المفردة سهلة الفحص والشرح، لكن مجموعة من خمسين شجرة تتحول إلى صندوق أسود. وقد أقرّ بريمان نفسه بهذه المقايضة حين قال ما مفاده: ما تخسره مع الأشجار هو البنية البسيطة القابلة للتفسير، وما تكسبه هو دقة أعلى.
الإرث: من التكييس إلى الغابات
أرسى التكييس مبدأين رسما ملامح العقدين التاليين من تعلّم الآلة. الأول: دمج عدد كبير من الذين يُفرطون في التعلّم يمكن أن يُنتج نموذجاً قوياً — لا عن طريق تحسين كل واحد منهم على حدة، بل عن طريق تنويع أخطائهم بحيث يُلغي بعضها بعضاً. والثاني: التمهيد محرك فعّال لتنويع المجموعة التجميعية — فكل مجموعة بيانات مُعاد سحبها تُبرز جوانب مختلفة من البيانات الأصلية.
1984
CART (أشجار التصنيف والانحدار)
قدّم بريمان وفريدمان وأولشن وستون خوارزمية CART — خوارزمية الأشجار التأسيسية التي سيُروّضها التكييس لاحقاً.
1996
تكييس المتنبِّئات
يقترح بريمان التجميع بالتمهيد. يُثبت تخفيض التباين ويُحقّق تخفيضاً في الخطأ بين 20% و47% على مجموعات بيانات حقيقية، ويُقدّم تقدير خارج الكيس.
1997
AdaBoost
يُقدّم فرويند وشابير AdaBoost — أسلوب التجميع التكميلي الذي يُخفّض الانحياز بالتتابع بدلاً من تخفيض التباين بالتوازي.
2001
الغابات العشوائية
يُوسّع بريمان التكييس بإضافة اختيار عشوائي للسمات عند كل انقسام، فتفقد الأشجار ارتباطها ببعضها ويزداد تخفيض التباين. تُصبح واحدة من أكثر الخوارزميات استخداماً في تعلّم الآلة.
2016
XGBoost يهيمن على Kaggle
أشجار التعزيز التدريجي — التي تدين بفلسفتها التجميعية للتكييس والتعزيز — تُصبح الخيار الأول في مسابقات البيانات الجدولية.
الغابات العشوائية هي تكييس مع إضافة ذكية: عند كل انقسام لا يُنظر إلا في مجموعة فرعية عشوائية من . هذا بين الأشجار ويعصر تبايناً إضافياً كان التكييس وحده يتركه على الطاولة. AdaBoost سلك الطريق المعاكس — مجموعات تتابعية تُخفّض الانحياز — وقاد إلى عائلة التعزيز التدريجي. هذان الفرعان معاً أعطيانا أقوى الخوارزميات المتاحة اليوم للتعامل مع .
المرجعBreiman, L.. Bagging Predictors. Machine Learning, 1996.
مصطلحات هذه الورقة
- التجميع المتوازي للعينات العشوائيةBagging
- المعاينة التمهيديةBootstrap Sampling
- النماذج التجميعية الهجينةEnsemble
- التباينVariance
- فرط التخصيصOverfitting
- شجرة القرار الإحصائيةDecision Tree
- الغابة العشوائية خوارزميةRandom Forest
- الموازنة بين الانحياز والتباعدBias-Variance Tradeoff
- العيّنات غير المُستخدَمةOut-of-Bag (OOB)
- دمج النماذجModel Combination