📖 الدرس السادس: التعلم الخاضع للإشراف المتقدم
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) للبيانات غير الطبيعية
- مشروع عملي: تحليل سلوك العملاء وتجميعهم