أقسام الوصول السريع (مربع البحث)

📰 آخر الأخبار

📖 الدرس السادس: التعلم الخاضع للإشراف المتقدم

الدرس السادس: التعلم الخاضع للإشراف المتقدم - شرح مفصل مع أمثلة عملية

📖 الدرس السادس: التعلم الخاضع للإشراف المتقدم

Cross Validation، Hyperparameter Tuning، وEnsemble Methods

التعلم الخاضع للإشراف المتقدم
📖
الدرس السادس
⏱️
90-120 دقيقة
🎓
متقدم
💻
مثال شامل

🎯 أهداف الدرس

  • فهم تقنيات التحقق المتقاطع (Cross Validation) وأنواعها المختلفة
  • إتقان تحسين المعاملات الفائقة (Hyperparameter Tuning) باستخدام Grid Search وRandom Search
  • تعلم طرق التجميع (Ensemble Methods) مثل Random Forest وGradient Boosting
  • تطبيق تقنيات تحسين الأداء على مشروع حقيقي
  • فهم مقاييس التقييم المتقدمة وكيفية اختيار الأنسب
  • تجنب مشاكل Overfitting وUnderfitting

🔍 1. مقدمة: لماذا التعلم المتقدم؟

في الدرس السابق تعلمنا أساسيات Scikit-learn وبناء نماذج بسيطة. الآن حان الوقت للانتقال إلى المستوى التالي! التعلم الخاضع للإشراف المتقدم يتضمن تقنيات متطورة لتحسين أداء النماذج وجعلها أكثر دقة وموثوقية.

📊 حقائق مذهلة:

  • 95% من مشاريع الذكاء الاصطناعي الناجحة تستخدم تقنيات التحسين المتقدمة
  • Cross Validation يحسن دقة النماذج بنسبة 15-30% في المتوسط
  • Google وFacebook وNetflix تعتمد على Ensemble Methods في أنظمتها الأساسية
  • Hyperparameter Tuning يمكن أن يضاعف أداء النموذج في بعض الحالات

💡 نصيحة مهمة

🔄 2. التحقق المتقاطع (Cross Validation)

التحقق المتقاطع هو تقنية أساسية لتقييم أداء النماذج بشكل موثوق. بدلاً من تقسيم البيانات مرة واحدة، نقسمها عدة مرات ونختبر النموذج على كل تقسيم.

التحقق المتقاطع

🎯 أنواع التحقق المتقاطع:

1. K-Fold Cross Validation

الأكثر شيوعاً واستخداماً. نقسم البيانات إلى K أجزاء متساوية:

from sklearn.model_selection import cross_val_score, KFold
from sklearn.ensemble import RandomForestClassifier
import numpy as np

# إنشاء نموذج
model = RandomForestClassifier(n_estimators=100, random_state=42)

# تطبيق 5-Fold Cross Validation
kfold = KFold(n_splits=5, shuffle=True, random_state=42)
cv_scores = cross_val_score(model, X, y, cv=kfold, scoring='accuracy')

print(f"دقة كل fold: {cv_scores}")
print(f"متوسط الدقة: {cv_scores.mean():.3f} ± {cv_scores.std():.3f}")

# النتيجة المتوقعة:
# دقة كل fold: [0.92  0.895 0.91  0.905 0.88 ]
# متوسط الدقة: 0.902 ± 0.014
                

2. Stratified K-Fold

يحافظ على نسبة الفئات في كل fold - مهم جداً للبيانات غير المتوازنة:

from sklearn.model_selection import StratifiedKFold

# للبيانات غير المتوازنة
stratified_kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
stratified_scores = cross_val_score(model, X, y, cv=stratified_kfold, scoring='accuracy')

print(f"Stratified CV الدقة: {stratified_scores.mean():.3f} ± {stratified_scores.std():.3f}")
                
أنواع التحقق المتقاطع من Scikit-learn

⚠️ تحذيرات مهمة

  • لا تستخدم LOO مع البيانات الكبيرة - سيستغرق وقتاً طويلاً جداً
  • استخدم Stratified K-Fold دائماً مع التصنيف للحصول على نتائج موثوقة
  • K=5 أو K=10 هما الأكثر شيوعاً - توازن جيد بين الدقة والسرعة

⚙️ 3. تحسين المعاملات الفائقة (Hyperparameter Tuning)

تصور تحسين المعاملات الفائقة

🔍 1. Grid Search - البحث الشامل

يجرب جميع التركيبات الممكنة للمعاملات:

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier

# تحديد المعاملات للبحث
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [3, 5, 7, None],
    'min_samples_split': [2, 5, 10],
    'min_samples_leaf': [1, 2, 4]
}

# إنشاء Grid Search
grid_search = GridSearchCV(
    estimator=RandomForestClassifier(random_state=42),
    param_grid=param_grid,
    cv=5,  # 5-fold cross validation
    scoring='accuracy',
    n_jobs=-1,  # استخدام جميع المعالجات
    verbose=1   # إظهار التقدم
)

# تدريب وإيجاد أفضل معاملات
grid_search.fit(X_train, y_train)

print(f"أفضل معاملات: {grid_search.best_params_}")
print(f"أفضل دقة: {grid_search.best_score_:.3f}")
                

🎯 2. Random Search - البحث العشوائي

أسرع من Grid Search ويعطي نتائج جيدة جداً:

مقارنة طرق تحسين المعاملات الفائقة
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

# تحديد توزيعات المعاملات
param_distributions = {
    'n_estimators': randint(50, 500),
    'max_depth': [3, 5, 7, 10, None],
    'min_samples_split': randint(2, 20),
    'min_samples_leaf': randint(1, 10)
}

# إنشاء Random Search
random_search = RandomizedSearchCV(
    estimator=RandomForestClassifier(random_state=42),
    param_distributions=param_distributions,
    n_iter=100,  # عدد التجارب
    cv=5,
    scoring='accuracy',
    n_jobs=-1,
    random_state=42
)

random_search.fit(X_train, y_train)
print(f"أفضل معاملات: {random_search.best_params_}")
                

📊 مقارنة الطرق:

الطريقة الوقت المطلوب جودة النتائج متى نستخدمها
Grid Search طويل جداً ممتازة معاملات قليلة، وقت متاح
Random Search متوسط جيدة جداً معاملات كثيرة، وقت محدود
Bayesian Optimization قصير ممتازة معاملات معقدة، خبرة متقدمة

🤝 4. طرق التجميع (Ensemble Methods)

🌳 1. Random Forest

from sklearn.ensemble import RandomForestClassifier

# إنشاء Random Forest
rf = RandomForestClassifier(
    n_estimators=200,    # عدد الأشجار
    max_depth=10,        # عمق كل شجرة
    min_samples_split=5, # الحد الأدنى للتقسيم
    random_state=42
)

rf.fit(X_train, y_train)
rf_score = rf.score(X_test, y_test)
print(f"دقة Random Forest: {rf_score:.3f}")
                

🚀 2. Gradient Boosting

from sklearn.ensemble import GradientBoostingClassifier

# إنشاء Gradient Boosting
gb = GradientBoostingClassifier(
    n_estimators=100,
    learning_rate=0.1,
    max_depth=3,
    random_state=42
)

gb.fit(X_train, y_train)
gb_score = gb.score(X_test, y_test)
print(f"دقة Gradient Boosting: {gb_score:.3f}")
                

🗳️ 3. Voting Classifier

from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC

# إنشاء نماذج متعددة
lr = LogisticRegression(random_state=42)
svm = SVC(probability=True, random_state=42)
rf = RandomForestClassifier(random_state=42)

# دمجها في Voting Classifier
voting_clf = VotingClassifier(
    estimators=[('lr', lr), ('svm', svm), ('rf', rf)],
    voting='soft'  # استخدام الاحتماليات
)

voting_clf.fit(X_train, y_train)
voting_score = voting_clf.score(X_test, y_test)
print(f"دقة Voting Classifier: {voting_score:.3f}")
                

💪 تمارين عملية

  1. تحسين نموذج SVM: استخدم GridSearchCV لتحسين نموذج SVM على بيانات تصنيف. جرب معاملات C وgamma المختلفة وقارن النتائج مع Random Forest.
  2. تطبيق Ensemble Methods: أنشئ نموذج Voting Classifier يجمع Random Forest وGradient Boosting وLogistic Regression. قارن أداءه مع النماذج المنفردة.
  3. تحليل Cross Validation: طبق أنواع مختلفة من Cross Validation على نفس البيانات وقارن النتائج. متى تستخدم كل نوع؟

📚 ملخص الدرس والخطوات التالية

✅ ما تعلمناه اليوم:

  • التحقق المتقاطع: K-Fold، Stratified، وLOO للتقييم الموثوق
  • تحسين المعاملات: Grid Search وRandom Search للحصول على أفضل أداء
  • طرق التجميع: Random Forest، Gradient Boosting، وVoting للدقة العالية
  • أفضل الممارسات: تجنب Overfitting وتحسين الأداء

💡 أفضل الممارسات

  • ابدأ بـ Random Search ثم استخدم Grid Search للتحسين الدقيق
  • استخدم Stratified K-Fold دائماً مع مشاكل التصنيف
  • جرب Ensemble Methods للحصول على أفضل أداء
  • راقب Overfitting باستخدام منحنيات التعلم

➡️ الدرس القادم:

في الدرس السابع سنتعلم "التعلم غير الخاضع للإشراف" حيث سنستكشف:

  • خوارزميات التجميع (Clustering) مثل K-Means وDBSCAN
  • تقليل الأبعاد (Dimensionality Reduction) باستخدام PCA وt-SNE
  • كشف الشذوذ (Anomaly Detection) للبيانات غير الطبيعية
  • مشروع عملي: تحليل سلوك العملاء وتجميعهم

🎓 إكمال الدرس

بإكمال هذا الدرس، ستكون مؤهلاً لتطبيق تقنيات التعلم المتقدمة على مشاريع حقيقية

وبناء نماذج ذكاء اصطناعي عالية الأداء ودقيقة

© 2025 دورة Python للذكاء الاصطناعي. جميع الحقوق محفوظة.
تم إنشاء هذا المحتوى لأغراض تعليمية. يُرجى عدم إعادة النشر بدون إذن.

تعليقات