📖 الدرس السادس: التعلم الخاضع للإشراف المتقدم
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}")
⚠️ تحذيرات مهمة
- لا تستخدم 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}")
💪 تمارين عملية
- تحسين نموذج SVM: استخدم GridSearchCV لتحسين نموذج SVM على بيانات تصنيف. جرب معاملات C وgamma المختلفة وقارن النتائج مع Random Forest.
- تطبيق Ensemble Methods: أنشئ نموذج Voting Classifier يجمع Random Forest وGradient Boosting وLogistic Regression. قارن أداءه مع النماذج المنفردة.
- تحليل 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) للبيانات غير الطبيعية
- مشروع عملي: تحليل سلوك العملاء وتجميعهم