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

📰 آخر الأخبار

📖 الدرس الخامس: Scikit-learn الأساسيات

الدرس الخامس: Scikit-learn الأساسيات - مقدمة التعلم الآلي

📖 الدرس الخامس: Scikit-learn الأساسيات

مقدمة شاملة للتعلم الآلي مع أمثلة عملية متقدمة

📖 الدرس الخامس

Scikit-learn الأساسيات

⏱️ المدة المتوقعة

90-120 دقيقة

🎓 المستوى

متوسط إلى متقدم

💻 الأمثلة العملية

20+ مثال شامل

🎯 أهداف الدرس

بنهاية هذا الدرس ستكون قادراً على:

  • فهم مفاهيم التعلم الآلي الأساسية وأنواعه المختلفة
  • استخدام مكتبة Scikit-learn لبناء نماذج التعلم الآلي
  • تطبيق خوارزميات التصنيف والانحدار والتجميع
  • تقييم أداء النماذج باستخدام مقاييس مختلفة
  • معالجة البيانات وتحضيرها للتعلم الآلي
  • بناء مشروع تعلم آلي متكامل من البداية للنهاية
📚 المتطلبات المسبقة

⚠️ تأكد من إتقان:

  • أساسيات Python (الدروس 1-2)
  • NumPy للحوسبة العلمية (الدرس 2)
  • Pandas لمعالجة البيانات (الدرس 3)
  • Matplotlib للتصور البياني (الدرس 4)
  • مفاهيم الإحصاء الأساسية
🤖 ما هو التعلم الآلي؟
شعار Scikit-learn
Scikit-learn - أشهر مكتبة للتعلم الآلي في Python

التعلم الآلي (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

📦 التثبيت

# تثبيت 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. جمع البيانات: الحصول على بيانات عالية الجودة ومناسبة للمشكلة
  2. استكشاف البيانات: فهم البيانات وتحليلها إحصائياً وبصرياً
  3. تنظيف البيانات: معالجة القيم المفقودة والشاذة والتكرارات
  4. هندسة المتغيرات: إنشاء متغيرات جديدة وتحويل الموجودة
  5. تقسيم البيانات: فصل بيانات التدريب والاختبار
  6. اختيار النموذج: تحديد الخوارزمية المناسبة للمشكلة
  7. تدريب النموذج: تعليم النموذج على بيانات التدريب
  8. تقييم الأداء: قياس دقة النموذج على بيانات الاختبار
  9. ضبط المعاملات: تحسين أداء النموذج
  10. النشر: تطبيق النموذج في الإنتاج

🎯 نصائح للنجاح:

  • ابدأ بسيط: استخدم نماذج بسيطة أولاً ثم تعقد تدريجياً
  • فهم البيانات: اقضِ وقتاً كافياً في استكشاف البيانات
  • تحقق من الجودة: تأكد من جودة البيانات قبل التدريب
  • قس الأداء: استخدم مقاييس متعددة لتقييم النموذج
  • تجنب الإفراط في التدريب: احرص على التوازن بين التدريب والتعميم
🎯 مثال عملي شامل: تصنيف جودة النبيذ

سنبني نموذج تعلم آلي لتصنيف جودة النبيذ بناءً على خصائصه الكيميائية. هذا مثال واقعي يستخدم في صناعة النبيذ لضمان الجودة.

دليل Scikit-learn الشامل
Scikit-learn يوفر أدوات شاملة لجميع مراحل التعلم الآلي

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

© 2025 دورة Python للذكاء الاصطناعي - جميع الحقوق محفوظة

تم إنشاء هذا المحتوى لأغراض تعليمية

تعليقات