الـ decision tree (شجرة القرار) الواحدة قوية بس هشّة. درّبها على بيانات مختلفة شوية وهتاخد شجرة مختلفة خالص. الحساسية دي — اللي اسمها الـ high variance (التباين العالي) — هي نقطة الضعف الأساسية في الأشجار المنفردة. والـ random forests (الغابات العشوائية) بتحل المشكلة دي بفكرة بسيطة وحلوة: ابني أشجار كتير، كل واحدة مختلفة شوية، وسيبهم يصوّتوا.
الـ decision tree العميقة هتحفظ الـ training set تقريبًا كلها. ولو اديتها نفس المهمة ببيانات متعدّلة شوية، هتطلّع هيكل مختلف جدًا. الـ model عنده bias (تحيز) واطي (يقدر يناسب patterns معقّدة) بس variance عالي (حسّاس جدًا للنقط اللي بيشوفها).
والأرقام بتحكي الحكاية: شجرة عميقة من غير pruning ممكن تجيب 100% accuracy على بيانات التدريب و60% بس على بيانات الاختبار. والفجوة بين الرقمين دول هي مشكلة الـ variance.
الفكرة الأساسية: لو عندك N model مستقلين، كل واحد بيغلط غلطات عشوائية، فمتوسط الـ predictions بتاعتهم الـ variance بتاعه أصغر N مرة من أي model لوحده. الغلطات بتلغي بعضها.
افترض إنك طلبت من 100 شخص يقدّروا وزن برطمان مليان عملات. كل واحد غلطه صغير بس الغلطات رايحة في اتجاهات مختلفة — شوية فوق، وشوية تحت. ومتوسط تخميناتهم غالبًا هيبقى أقرب للحقيقة من أي شخص لوحده.
ده الـ ensemble learning (التعلم التجميعي). والـ random forests بتطبّق نفس المبدأ على الـ decision trees. كل شجرة estimator لوحدها مش كامل بس مستقل. والـ prediction الجماعي بتاعهم أوثق من أي شجرة لوحدها.
كل شجرة في الغابة بتتدرّب على dataset مختلفة — بس إحنا مش بنجمع بيانات جديدة. بدل كده، بناخد عيّنة من الـ training set الموجودة بالسحب مع الإرجاع. ودي اسمها bootstrap sample.
لو عندك 1,000 مثال تدريب، كل شجرة بتشوف سحبة عشوائية من 1,000 مثال — بس شوية منهم بيظهروا مرتين، وشوية تلات مرات، وحوالي 37% مبيظهروش خالص. أشجار مختلفة بتشوف نسخ مختلفة من البيانات، فبتضطر تتعلّم بشكل مختلف.
والتقنية دي — إنك تدرّب models كتير على bootstrap samples وتدمجهم — اسمها الـ bagging (التجميع التكثيفي). قدّمها ليو بريمان سنة 1994.
الـ bagging لوحده بيخلّي الأشجار مختلفة من ناحية العينات اللي بتشوفها. بس لو كل الـ features متاحة عند كل split، الأشجار اللي اتدرّبت على بيانات متداخلة هتطلع شبه بعض — خصوصًا قرب الـ root، اللي فيه feature واحدة مسيطرة بتميل تتختار الأول.
فالـ random forests بتزوّد مصدر عشوائية تاني: عند كل split في كل شجرة، بنبص بس على subset عشوائية من الـ features. وحجم الـ subset المعتاد ماشي على قاعدة تقريبية:
ولما تجبر كل split إنه يبص بس على subset من الـ features، الأشجار بتبقى مش مترابطة — بتميل تستخدم features مختلفة في splits مختلفة، فغلطاتها بتبقى مستقلة أكتر وأقرب إنها تلغي بعضها.
أول ما كل الأشجار تتدرّب، التنبؤ بسيط. كل شجرة بتصنّف الـ input لوحدها. في الـ classification، الغابة بتاخد تصويت الأغلبية — الفئة اللي أغلب الأشجار اتنبأت بيها. وفي الـ regression، بتاخد المتوسط على كل الأشجار.
مثال: أربع أشجار بتصوّت [آه، آه، لأ، آه] ← الغابة بتتنبأ بآه (3 من 4). وكل ما تزوّد أشجار، التصويت بيبقى أثبت وأوثق.
افتكر إن ~37% من أمثلة التدريب مش بتستخدمها أي شجرة بعينها. ودي اسمها عينات الـ out-of-bag (خارج الحقيبة) (OOB) للشجرة دي. ونقدر نستخدمها كـ validation set — نقيّم كل مثال تدريب بالأشجار اللي مشافتهوش في التدريب بس.
ولما تجمع الـ predictions دي بتاخد تقدير الـ OOB error — تقدير مش منحاز للـ generalization error، تقريبًا ببلاش، من غير ما تحتاج validation set منفصلة أو cross-validation. ودي من الحاجات الحلوة عمليًا في الـ random forests.
أثر جانبي مفيد لتدريب الـ random forests هو إنك ترتّب كل feature مهمة قد إيه. والمقياس المعتاد هو الـ mean decrease in impurity (متوسط انخفاض الشوائب) (MDI):
الـ features اللي بتظهر بدري في الأشجار (قريب من الـ root) وبتعمل مكاسب نضافة كبيرة بتاخد درجات importance عالية. والدرجات النهائية متعايرة بحيث مجموعها يساوي 1.
وده بيدّيك ترتيب ببلاش للمتغيرات الأهم للتنبؤ — مفيد للـ feature selection، وتفسير الـ model، وفهم مجال مشكلتك.
الـ random forests سهل تظبطها بشكل ملفت — بتشتغل كويس بالإعدادات الافتراضية ومش حسّاسة لأغلب الـ hyperparameters (المعاملات الفائقة).
الـ bias-variance trade-off بيشرح الـ random forests بوضوح. الـ decision tree العميقة عندها bias واطي — تقدر تقرّب أي function تقريبًا — بس variance عالي — بتتغيّر جامد مع بيانات التدريب.
لما تاخد متوسط N model مستقلين، الـ bias بيفضل زي ما هو بس الـ variance بينزل بمعامل N. المشكلة إن الأشجار مش مستقلة تمامًا — مبنية من بيانات متداخلة وبتشترك في الـ features. والترابط بين الأشجار بيحدّ من تقليل الـ variance.
واختيار الـ features العشوائي هو الابتكار الأساسي اللي بيقلّل ترابط الأشجار. لما تجبر كل شجرة تستخدم مجموعات features مختلفة، الأشجار بتبقى مستقلة أكتر، وتقليل الـ variance بيقرّب من الحد النظري 1/N.
الـ random forests غالبًا أول model تجرّبه على مسائل البيانات المتنظّمة/الجدولية. بتتعامل مع القيم الناقصة، وأنواع الـ features المختلطة، والـ inputs اللي أبعادها كتير بكفاءة، ونادرًا ما بتعمل overfitting وحش.