📖 الدرس الخامس: 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
- اقرأ الأوراق البحثية الحديثة
- شارك في مجتمعات التعلم الآلي
- طور مشاريعك الشخصية
- تابع أحدث التطورات في المجال