0Pricing
Python Academy · درس

النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية

أنشئ نماذج أشجار القرار والغابات التجميعية واضبطها

النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

مفاهيم أشجار القرار

تقسم شجرة القرار البيانات إلى مجموعات فرعية من خلال طرح سلسلة من الأسئلة الثنائية. تمثل كل عقدة داخلية حدًا لسمة، بينما تمثل كل ورقة تنبؤًا.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=3, random_state=0).fit(X, y)
print("Depth:", model.get_depth())
print("Leaves:", model.get_n_leaves())

‏DecisionTreeClassifier

المعلمات الفائقة الأساسية هي: max_depth وmin_samples_split وmin_samples_leaf. فالأشجار الأعمق تُفرط في التخصيص، بينما تعاني الأشجار الأقل عمقًا من نقص التخصيص.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

model = DecisionTreeClassifier(max_depth=5, min_samples_leaf=5)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

‏DecisionTreeRegressor

تتعامل أشجار القرار أيضًا مع الانحدار، وذلك بالتنبؤ بمتوسط قيمة الهدف في كل ورقة.

from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import mean_squared_error

X, y = make_regression(noise=15, random_state=0)
model = DecisionTreeRegressor(max_depth=4).fit(X, y)
print("RMSE:", mean_squared_error(y, model.predict(X))**0.5)

أهمية السمات

تعرض model.feature_importances_ الأهمية النسبية لكل سمة، استنادًا إلى انخفاض عدم النقاء.

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
import numpy as np

X, y = load_iris(return_X_y=True)
feature_names = load_iris().feature_names
model = DecisionTreeClassifier().fit(X, y)
for name, imp in sorted(zip(feature_names, model.feature_importances_), key=lambda x: -x[1]):
    print(f"{name}: {imp:.3f}")

نظرة عامة على Random Forest

يدرّب Random Forest عددًا كبيرًا من أشجار القرار غير المترابطة على عينات Bootstrap، ثم يحسب متوسط تنبؤاتها، مما يقلل التباين من دون زيادة الانحياز.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

model = RandomForestClassifier(n_estimators=100, random_state=0)
model.fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

‏RandomForestRegressor

تعمل الغابات العشوائية بالكفاءة نفسها في مسائل الانحدار.

from sklearn.ensemble import RandomForestRegressor
from sklearn.datasets import make_regression
from sklearn.metrics import r2_score

X, y = make_regression(noise=10, random_state=0)
model = RandomForestRegressor(n_estimators=100, random_state=0).fit(X, y)
print("R²:", r2_score(y, model.predict(X)))

درجة Out-of-Bag

اضبط oob_score=True للحصول على درجة تحقق مجانية باستخدام العينات غير الموجودة في عينة Bootstrap الخاصة بكل شجرة، من دون الحاجة إلى مجموعة اختبار منفصلة.

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

X, y = make_classification(random_state=0)
model = RandomForestClassifier(n_estimators=100, oob_score=True, random_state=0).fit(X, y)
print("OOB score:", model.oob_score_)

التعزيز المتدرج

يدرّب التعزيز المتدرج (GBM) الأشجار بالتتابع، بحيث تصحح كل شجرة أخطاء الشجرة السابقة. وغالبًا ما يكون أدق من Random Forest، لكنه أبطأ في التدريب.

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
model = GradientBoostingClassifier(n_estimators=100).fit(X_tr, y_tr)
print("Test acc:", model.score(X_te, y_te))

‏XGBoost / LightGBM

يُعد XGBoost وLightGBM مكتبتين محسّنتين للتعزيز المتدرج؛ فهما أسرع وأكثر قابلية للتوسع، وغالبًا ما تكون دقتهما أعلى من GBM في sklearn.

# pip install xgboost lightgbm
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)

xgb = XGBClassifier(n_estimators=100, eval_metric="logloss").fit(X_tr, y_tr)
print("XGB acc:", xgb.score(X_te, y_te))

ضبط n_estimators

يقلل عدد الأشجار الأكبر في Random Forest التباين (حتى حد معين) من دون التسبب في فرط التخصيص. استخدم منحنى التحقق للعثور على العدد الأمثل.

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
from sklearn.datasets import make_classification
import numpy as np

X, y = make_classification(random_state=0)
for n in [10, 50, 100, 200]:
    scores = cross_val_score(RandomForestClassifier(n_estimators=n, random_state=0), X, y, cv=5)
    print(f"n={n}: {scores.mean():.3f}")

تصوير شجرة القرار

استخدم sklearn.tree.plot_tree أو export_text لفحص ما تعلمته الشجرة.

from sklearn.tree import DecisionTreeClassifier, export_text, plot_tree
from sklearn.datasets import load_iris

X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=2).fit(X, y)
print(export_text(model, feature_names=load_iris().feature_names.tolist()))

تحقق سريع

كيف تقلل Random Forest من فرط التخصيص مقارنةً بشجرة قرار واحدة؟

مراجعة

تقسم أشجار القرار البيانات وفق حدود السمات، وتتنبأ باستخدام قيم الأوراق. اضبط max_depth للتحكم في فرط التخصيص. تحسب Random Forest متوسط عدد كبير من الأشجار لتقليل التباين. ويدرّب التعزيز المتدرج الأشجار بالتتابع لتحقيق دقة عالية. وفي بيئات الإنتاج، يُفضّل استخدام XGBoost أو LightGBM.

الأسئلة الشائعة

هل درس «النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية» مجاني؟

نعم — نص درس «النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية»؟

أنشئ نماذج أشجار القرار والغابات التجميعية واضبطها تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. واجهة scikit-learn: ‏fit وtransform وpredict
  2. النماذج الخطية: الانحدار والتصنيف
  3. النماذج القائمة على الأشجار: أشجار القرار والغابات العشوائية
  4. تقييم النماذج والتحقق المتقاطع
← العودة إلى Python Academy