تخطَّ إلى المحتوى

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