Random Forest
الغابة العشوائية (Random Forest) Random Forest
الغابة العشوائية تجمّع عدة أشجار قرار تدرّبت على بيانات/ميزات مختلفة، ثم تصوّت/متوسط تنبؤاتها — تقليل التباين مع الاحتفاظ بقدرة التعلّم.
الغابة العشوائية = مجموعة (ensemble) من أشجار قرار. تدرّب كل شجرة على عيّنة bootstrap (سحب عشوائي مع إعادة من بيانات التدريب) ومع subset عشوائي من الميزات في كل تقسيم. النتيجة: أشجار مستقلة نسبيًا، فرط التعلّم كل واحدة منها يُلغى جزئيًا بمتوسطات/تصويت المجموعة.
التصنيف: كل شجرة تصوّت، الأكثرية تفوز (voting). الانحدار: متوسط تنبؤات كل الأشجار. من أقوى نماذج ML الكلاسيكية — غالبًا baseline صعب التفوق عليه دون تعلّم عميق، وقابل للتطبيق مباشرة دون تطبيع بيانات.
مقايضاتها: تستهلك ذاكرة وحسابًا أكثر من شجرة واحدة (n_estimators كبير = مكلف)، والتنبؤ أبطأ. feature_importances_ متاحة لكنها أقل استقرارًا من شجرة واحدة. للمشاكل الجدولية (tabular) Random Forest/XGBoost منافس قوي جدًا للشبكات العصبية.
الصياغة
for each tree t in [1..n_estimators]:
sample = bootstrap_sample(X_train, y_train)
t.fit(sample, subset_of_features)
# التصنيف
prediction = mode([t.predict(X) for t in trees])
# الانحدار
prediction = mean([t.predict(X) for t in trees])📄 مثال
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
X, y = load_wine(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, stratify=y)
model = RandomForestClassifier(n_estimators=200, max_depth=5, random_state=42)
model.fit(X_train, y_train)
print(f"دقة الاختبار: {model.score(X_test, y_test):.3f}")
print(f"أهم 3 ميزات: {model.feature_importances_.argsort()[-3:][::-1]}")أهم النقاط
| النقطة | الوظيفة |
|---|---|
| n_estimators | عدد الأشجار — كلما زاد، تحسّن الأداء حتى نقطة تشبّع |
| max_features | عدد الميزات المرشّحة في كل تقسيم — يقلل التباين |
| max_depth | أقصى عمق لكل شجرة — يحدّ من فرط التعلّم الفردي |
| oob_score | تقييم بدون بيانات out-of-bag (العيّنات غير المختارة بـ bootstrap) |
💡 نصائح عملية
- n_estimators=100 نقطة بداية جيدة، ارفعها تدريجيًا حتى يستقر الأداء — كل شجرة تكلّف ذاكرة
- oob_score يعطيك تقييمًا مجانيًا بدون تركيب مجموعة تحقق منفصلة — استفد منه حين البيانات محدودة
⚠️ أخطاء شائعة
- افتراض أن Random Forest لا يفرط في التعلّم — يفرط أقل من شجرة واحدة، لكنه يفرط مع بيانات قليلة وميزات كثيرة
- استخدام feature_importances_ كمؤشر سببي — يعكس إسهام الميزة في التنبؤ داخل النموذج، لا في الواقع
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.
📚 للتعمق التقني الكامل بالإنجليزية: scikit-learn Documentation