📖 الدرس الخامس: Scikit-learn الأساسيات
مقدمة شاملة للتعلم الآلي مع أمثلة عملية متقدمة
📖 الدرس الخامس
Scikit-learn الأساسيات
⏱️ المدة المتوقعة
90-120 دقيقة
🎓 المستوى
متوسط إلى متقدم
💻 الأمثلة العملية
20+ مثال شامل
بنهاية هذا الدرس ستكون قادراً على:
- فهم مفاهيم التعلم الآلي الأساسية وأنواعه المختلفة
- استخدام مكتبة Scikit-learn لبناء نماذج التعلم الآلي
- تطبيق خوارزميات التصنيف والانحدار والتجميع
- تقييم أداء النماذج باستخدام مقاييس مختلفة
- معالجة البيانات وتحضيرها للتعلم الآلي
- بناء مشروع تعلم آلي متكامل من البداية للنهاية
⚠️ تأكد من إتقان:
- أساسيات Python (الدروس 1-2)
- NumPy للحوسبة العلمية (الدرس 2)
- Pandas لمعالجة البيانات (الدرس 3)
- Matplotlib للتصور البياني (الدرس 4)
- مفاهيم الإحصاء الأساسية
التعلم الآلي (Machine Learning) هو فرع من فروع الذكاء الاصطناعي يمكّن الحاسوب من التعلم واتخاذ القرارات من البيانات دون برمجة صريحة لكل حالة.
🔍 حقائق مذهلة عن التعلم الآلي:
- 97% من الشركات تستخدم التعلم الآلي في عملياتها
- 2.5 كوينتيليون بايت من البيانات تُنتج يومياً
- 80% من وقت عالم البيانات يُقضى في تنظيف البيانات
- Netflix توفر مليار دولار سنوياً بفضل خوارزميات التوصية
- Google يعالج 8.5 مليار بحث يومياً باستخدام التعلم الآلي
🎯 لماذا Scikit-learn؟
Scikit-learn هي أشهر وأقوى مكتبة للتعلم الآلي في Python، وتستخدمها أكبر الشركات العالمية:
🏢 الشركات المستخدمة
Google, Facebook, Netflix, Uber, Airbnb, Spotify
📊 الإحصائيات
50+ مليون تحميل شهرياً، 2000+ مساهم
🛠️ المميزات
سهولة الاستخدام، توثيق ممتاز، أداء عالي
🔧 الخوارزميات
100+ خوارزمية جاهزة للاستخدام
1️⃣ التعلم الخاضع للإشراف (Supervised Learning)
يتعلم النموذج من بيانات مُصنفة مسبقاً (لدينا المدخلات والمخرجات المطلوبة).
📊 التصنيف (Classification)
الهدف: تصنيف البيانات إلى فئات
أمثلة: تشخيص الأمراض، فلترة الرسائل المزعجة، التعرف على الصور
الخوارزميات: Decision Tree, Random Forest, SVM, Logistic Regression
📈 الانحدار (Regression)
الهدف: التنبؤ بقيم رقمية مستمرة
أمثلة: توقع أسعار المنازل، التنبؤ بالمبيعات، تقدير درجات الحرارة
الخوارزميات: Linear Regression, Polynomial Regression, Ridge, Lasso
2️⃣ التعلم غير الخاضع للإشراف (Unsupervised Learning)
يكتشف النموذج الأنماط في البيانات دون معرفة النتائج المطلوبة مسبقاً.
🎯 التجميع (Clustering)
الهدف: تجميع البيانات المتشابهة
أمثلة: تجميع العملاء، تحليل الجينات، ضغط الصور
الخوارزميات: K-Means, DBSCAN, Hierarchical Clustering
📉 تقليل الأبعاد (Dimensionality Reduction)
الهدف: تقليل عدد المتغيرات مع الحفاظ على المعلومات
أمثلة: ضغط البيانات، التصور، إزالة الضوضاء
الخوارزميات: PCA, t-SNE, LDA
3️⃣ التعلم المعزز (Reinforcement Learning)
يتعلم النموذج من خلال التفاعل مع البيئة والحصول على مكافآت أو عقوبات.
🎮 أمثلة التعلم المعزز:
- AlphaGo: هزم أبطال العالم في لعبة Go
- السيارات ذاتية القيادة: تعلم القيادة الآمنة
- التداول الآلي: اتخاذ قرارات الاستثمار
- الألعاب: تطوير ذكاء اصطناعي للألعاب
📦 التثبيت
# تثبيت Scikit-learn pip install scikit-learn # تثبيت المكتبات المساعدة pip install numpy pandas matplotlib seaborn # للتحقق من الإصدار python -c "import sklearn; print(sklearn.__version__)"
📚 استيراد المكتبات الأساسية
# استيراد المكتبات الأساسية import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # استيراد Scikit-learn from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.metrics import accuracy_score, classification_report from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC # إعداد التصور plt.style.use('seaborn-v0_8') sns.set_palette("husl") plt.rcParams['figure.figsize'] = (10, 6) plt.rcParams['font.size'] = 12
⚠️ نصائح مهمة:
- تأكد من استخدام Python 3.7 أو أحدث
- استخدم البيئات الافتراضية (Virtual Environments)
- احرص على تحديث المكتبات بانتظام
- اقرأ التوثيق الرسمي عند الحاجة
📋 الخطوات الأساسية لمشروع التعلم الآلي
- جمع البيانات: الحصول على بيانات عالية الجودة ومناسبة للمشكلة
- استكشاف البيانات: فهم البيانات وتحليلها إحصائياً وبصرياً
- تنظيف البيانات: معالجة القيم المفقودة والشاذة والتكرارات
- هندسة المتغيرات: إنشاء متغيرات جديدة وتحويل الموجودة
- تقسيم البيانات: فصل بيانات التدريب والاختبار
- اختيار النموذج: تحديد الخوارزمية المناسبة للمشكلة
- تدريب النموذج: تعليم النموذج على بيانات التدريب
- تقييم الأداء: قياس دقة النموذج على بيانات الاختبار
- ضبط المعاملات: تحسين أداء النموذج
- النشر: تطبيق النموذج في الإنتاج
🎯 نصائح للنجاح:
- ابدأ بسيط: استخدم نماذج بسيطة أولاً ثم تعقد تدريجياً
- فهم البيانات: اقضِ وقتاً كافياً في استكشاف البيانات
- تحقق من الجودة: تأكد من جودة البيانات قبل التدريب
- قس الأداء: استخدم مقاييس متعددة لتقييم النموذج
- تجنب الإفراط في التدريب: احرص على التوازن بين التدريب والتعميم
سنبني نموذج تعلم آلي لتصنيف جودة النبيذ بناءً على خصائصه الكيميائية. هذا مثال واقعي يستخدم في صناعة النبيذ لضمان الجودة.
📊 الخطوة 1: إنشاء وتحضير البيانات
# إنشاء بيانات تجريبية لجودة النبيذ import numpy as np import pandas as pd from sklearn.datasets import make_classification # إنشاء بيانات تجريبية np.random.seed(42) n_samples = 1000 # إنشاء بيانات التصنيف X, y = make_classification( n_samples=n_samples, n_features=11, n_informative=8, n_redundant=2, n_clusters_per_class=1, random_state=42 ) # أسماء المتغيرات (خصائص النبيذ) feature_names = [ 'fixed_acidity', # الحموضة الثابتة 'volatile_acidity', # الحموضة المتطايرة 'citric_acid', # حمض الستريك 'residual_sugar', # السكر المتبقي 'chlorides', # الكلوريدات 'free_sulfur_dioxide', # ثاني أكسيد الكبريت الحر 'total_sulfur_dioxide', # إجمالي ثاني أكسيد الكبريت 'density', # الكثافة 'pH', # الرقم الهيدروجيني 'sulphates', # الكبريتات 'alcohol' # الكحول ] # إنشاء DataFrame wine_data = pd.DataFrame(X, columns=feature_names) # تحويل التصنيف إلى جودة النبيذ (0: منخفض، 1: عالي) wine_data['quality'] = y wine_data['quality_label'] = wine_data['quality'].map({0: 'منخفض', 1: 'عالي'}) print(f"📊 تم إنشاء بيانات {len(wine_data)} عينة نبيذ") print(f"📈 المتغيرات: {len(feature_names)} متغير") print(f"🎯 التصنيفات: {wine_data['quality_label'].value_counts().to_dict()}")
🔍 الخطوة 2: استكشاف البيانات
# استكشاف البيانات الأساسي print("📋 معلومات أساسية عن البيانات:") print(wine_data.info()) print(" 📊 الإحصائيات الوصفية:") print(wine_data.describe()) # فحص التوزيع print(" 🎯 توزيع جودة النبيذ:") quality_distribution = wine_data['quality_label'].value_counts() print(quality_distribution) print(f" 📈 نسبة الجودة العالية: {quality_distribution['عالي']/len(wine_data)*100:.1f}%") # فحص القيم المفقودة missing_values = wine_data.isnull().sum() print(f" ❌ القيم المفقودة: {missing_values.sum()} قيمة") # حساب الارتباط بين المتغيرات correlation_matrix = wine_data[feature_names].corr() print(" 🔗 أقوى الارتباطات مع الجودة:") target_correlation = wine_data[feature_names + ['quality']].corr()['quality'].abs().sort_values(ascending=False) print(target_correlation.head(6))
⚙️ الخطوة 3: تحضير البيانات للتدريب
# تحضير البيانات from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # فصل المتغيرات المستقلة والتابعة X = wine_data[feature_names] y = wine_data['quality'] # تقسيم البيانات (80% تدريب، 20% اختبار) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42, stratify=y # للحفاظ على نسبة التصنيفات ) # تطبيع البيانات (مهم جداً للتعلم الآلي) scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) print(f"📊 بيانات التدريب: {X_train.shape[0]} عينة") print(f"📊 بيانات الاختبار: {X_test.shape[0]} عينة") print(f"📈 عدد المتغيرات: {X_train.shape[1]} متغير") # عرض إحصائيات التقسيم train_distribution = pd.Series(y_train).value_counts() test_distribution = pd.Series(y_test).value_counts() print(f" 🎯 توزيع التدريب: {train_distribution.to_dict()}") print(f"🎯 توزيع الاختبار: {test_distribution.to_dict()}")
🤖 الخطوة 4: تدريب نماذج متعددة
# استيراد النماذج from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.naive_bayes import GaussianNB # إنشاء النماذج models = { 'Logistic Regression': LogisticRegression(random_state=42), 'Random Forest': RandomForestClassifier(n_estimators=100, random_state=42), 'SVM': SVC(random_state=42), 'K-Nearest Neighbors': KNeighborsClassifier(n_neighbors=5), 'Naive Bayes': GaussianNB() } # تدريب وتقييم كل نموذج results = {} for name, model in models.items(): print(f" 🔄 تدريب نموذج {name}...") # تدريب النموذج model.fit(X_train_scaled, y_train) # التنبؤ y_pred_train = model.predict(X_train_scaled) y_pred_test = model.predict(X_test_scaled) # حساب الدقة train_accuracy = accuracy_score(y_train, y_pred_train) test_accuracy = accuracy_score(y_test, y_pred_test) results[name] = { 'train_accuracy': train_accuracy, 'test_accuracy': test_accuracy, 'model': model } print(f"✅ دقة التدريب: {train_accuracy:.3f}") print(f"✅ دقة الاختبار: {test_accuracy:.3f}") # عرض النتائج مرتبة print(" 🏆 ترتيب النماذج حسب دقة الاختبار:") sorted_results = sorted(results.items(), key=lambda x: x[1]['test_accuracy'], reverse=True) for i, (name, result) in enumerate(sorted_results, 1): print(f"{i}. {name}: {result['test_accuracy']:.3f}")
📊 الخطوة 5: تقييم مفصل للنموذج الأفضل
# اختيار أفضل نموذج best_model_name = sorted_results[0][0] best_model = results[best_model_name]['model'] print(f"🏆 أفضل نموذج: {best_model_name}") # تقييم مفصل from sklearn.metrics import classification_report, confusion_matrix from sklearn.metrics import precision_score, recall_score, f1_score # التنبؤ بالنموذج الأفضل y_pred_best = best_model.predict(X_test_scaled) # حساب المقاييس accuracy = accuracy_score(y_test, y_pred_best) precision = precision_score(y_test, y_pred_best) recall = recall_score(y_test, y_pred_best) f1 = f1_score(y_test, y_pred_best) print(f" 📊 تقييم مفصل للنموذج الأفضل:") print(f"🎯 الدقة (Accuracy): {accuracy:.3f}") print(f"🎯 الدقة (Precision): {precision:.3f}") print(f"🎯 الاستدعاء (Recall): {recall:.3f}") print(f"🎯 F1-Score: {f1:.3f}") # مصفوفة الخلط print(f" 📋 مصفوفة الخلط:") cm = confusion_matrix(y_test, y_pred_best) print(cm) # تقرير التصنيف print(f" 📈 تقرير التصنيف المفصل:") print(classification_report(y_test, y_pred_best, target_names=['جودة منخفضة', 'جودة عالية']))
🔍 الخطوة 6: تحليل أهمية المتغيرات
# تحليل أهمية المتغيرات (للنماذج التي تدعم ذلك) if hasattr(best_model, 'feature_importances_'): # للنماذج مثل Random Forest importances = best_model.feature_importances_ feature_importance = pd.DataFrame({ 'feature': feature_names, 'importance': importances }).sort_values('importance', ascending=False) print("🔍 أهمية المتغيرات:") for i, row in feature_importance.iterrows(): print(f"{row['feature']}: {row['importance']:.3f}") elif hasattr(best_model, 'coef_'): # للنماذج الخطية مثل Logistic Regression coefficients = abs(best_model.coef_[0]) feature_importance = pd.DataFrame({ 'feature': feature_names, 'importance': coefficients }).sort_values('importance', ascending=False) print("🔍 أهمية المتغيرات (القيم المطلقة للمعاملات):") for i, row in feature_importance.iterrows(): print(f"{row['feature']}: {row['importance']:.3f}") # اختبار النموذج على عينات جديدة print(" 🧪 اختبار النموذج على عينات جديدة:") test_samples = X_test_scaled[:5] predictions = best_model.predict(test_samples) probabilities = best_model.predict_proba(test_samples) if hasattr(best_model, 'predict_proba') else None for i in range(5): actual = y_test.iloc[i] predicted = predictions[i] status = "✅ صحيح" if actual == predicted else "❌ خطأ" print(f"العينة {i+1}: الفعلي={actual}, المتوقع={predicted} {status}") if probabilities is not None: prob_low = probabilities[i][0] prob_high = probabilities[i][1] print(f" احتمالية الجودة المنخفضة: {prob_low:.3f}") print(f" احتمالية الجودة العالية: {prob_high:.3f}")
🎯 ملخص النتائج:
- تم تدريب 5 نماذج مختلفة للمقارنة
- تم تحقيق دقة عالية في تصنيف جودة النبيذ
- تم تحديد أهم المتغيرات المؤثرة على الجودة
- تم اختبار النموذج على بيانات جديدة بنجاح
- النموذج جاهز للاستخدام في التطبيقات الحقيقية
🎯 مقاييس التصنيف (Classification Metrics)
المقياس | الوصف | المعادلة | متى نستخدمه |
---|---|---|---|
Accuracy | نسبة التنبؤات الصحيحة | (TP + TN) / (TP + TN + FP + FN) | البيانات متوازنة |
Precision | دقة التنبؤات الإيجابية | TP / (TP + FP) | تكلفة الإيجابية الخاطئة عالية |
Recall | نسبة اكتشاف الحالات الإيجابية | TP / (TP + FN) | تكلفة السلبية الخاطئة عالية |
F1-Score | المتوسط التوافقي للدقة والاستدعاء | 2 × (Precision × Recall) / (Precision + Recall) | البيانات غير متوازنة |
📈 مقاييس الانحدار (Regression Metrics)
📊 MAE (Mean Absolute Error)
الوصف: متوسط القيم المطلقة للأخطاء
المعادلة: Σ|y_true - y_pred| / n
المميزات: سهل الفهم، مقاوم للقيم الشاذة
📊 MSE (Mean Squared Error)
الوصف: متوسط مربعات الأخطاء
المعادلة: Σ(y_true - y_pred)² / n
المميزات: يعاقب الأخطاء الكبيرة بشدة
📊 RMSE (Root Mean Squared Error)
الوصف: الجذر التربيعي لمتوسط مربعات الأخطاء
المعادلة: √(MSE)
المميزات: نفس وحدة المتغير التابع
📊 R² (R-squared)
الوصف: معامل التحديد
المعادلة: 1 - (SS_res / SS_tot)
المميزات: يقيس نسبة التباين المفسر
⚠️ نصائح مهمة لاختيار المقاييس:
- للبيانات المتوازنة: استخدم Accuracy
- للبيانات غير المتوازنة: استخدم F1-Score أو AUC
- لتجنب الإيجابية الخاطئة: ركز على Precision
- لتجنب السلبية الخاطئة: ركز على Recall
- للانحدار: استخدم RMSE للمقارنة، R² لفهم جودة النموذج
🏋️ التمرين الأول: تصنيف الزهور (مبتدئ)
الهدف: بناء نموذج لتصنيف أنواع الزهور باستخدام بيانات Iris الشهيرة.
المطلوب:
- تحميل بيانات Iris من sklearn.datasets
- استكشاف البيانات وتصورها
- تدريب نموذج Decision Tree
- تقييم الأداء وحساب الدقة
- رسم مصفوفة الخلط
التلميح: استخدم from sklearn.datasets import load_iris
🏋️ التمرين الثاني: التنبؤ بأسعار المنازل (متوسط)
الهدف: بناء نموذج انحدار للتنبؤ بأسعار المنازل.
المطلوب:
- إنشاء بيانات تجريبية للمنازل (المساحة، الغرف، العمر، الموقع)
- تطبيق هندسة المتغيرات (إنشاء متغيرات جديدة)
- مقارنة 3 نماذج انحدار مختلفة
- حساب RMSE و R² لكل نموذج
- اختيار أفضل نموذج وتفسير النتائج
التلميح: استخدم PolynomialFeatures لإنشاء متغيرات تفاعلية
🏋️ التمرين الثالث: تجميع العملاء (متقدم)
الهدف: تطبيق التعلم غير الخاضع للإشراف لتجميع العملاء.
المطلوب:
- إنشاء بيانات عملاء (العمر، الدخل، الإنفاق، التكرار)
- تطبيق تطبيع البيانات
- استخدام K-Means لتجميع العملاء
- تحديد العدد الأمثل للمجموعات باستخدام Elbow Method
- تصور النتائج وتفسير خصائص كل مجموعة
- اقتراح استراتيجيات تسويقية لكل مجموعة
التلميح: استخدم inertia_ لحساب مجموع المربعات داخل المجموعات
🎯 نصائح لحل التمارين:
- ابدأ بفهم البيانات قبل تطبيق أي خوارزمية
- استخدم التصور البياني لفهم الأنماط
- جرب معاملات مختلفة وقارن النتائج
- اكتب تعليقات واضحة في الكود
- فسر النتائج من منظور الأعمال
🎯 ما تعلمته في هذا الدرس:
- ✅ مفاهيم التعلم الآلي الأساسية وأنواعه
- ✅ استخدام Scikit-learn لبناء نماذج التعلم الآلي
- ✅ سير عمل مشروع التعلم الآلي الكامل
- ✅ تطبيق خوارزميات التصنيف والانحدار
- ✅ تقييم أداء النماذج باستخدام مقاييس مختلفة
- ✅ مقارنة نماذج متعددة واختيار الأفضل
📚 الدروس القادمة:
📖 الدرس السادس
التعلم الخاضع للإشراف المتقدم
خوارزميات متقدمة، ضبط المعاملات، التحقق المتقاطع
📖 الدرس السابع
التعلم غير الخاضع للإشراف
التجميع، تقليل الأبعاد، كشف الشذوذ
📖 الدرس الثامن
TensorFlow وKeras
الشبكات العصبية العميقة والتعلم العميق
📖 الدرس التاسع
معالجة اللغات الطبيعية
تحليل النصوص، المشاعر، الترجمة الآلية
💡 نصائح للتطوير المستمر:
- مارس على مشاريع حقيقية من Kaggle
- اقرأ الأوراق البحثية الحديثة
- شارك في مجتمعات التعلم الآلي
- طور مشاريعك الشخصية
- تابع أحدث التطورات في المجال