AI: الخوارزميات والنماذج

آخر تحديث: 2026-08-26

الخوارزميات هي الأساليب التي تتعلم بها الذكاء الاصطناعي، والنماذج هي نتائج ذلك التعلم. ستساعدك هذه الفصل على فهم عمليات التدريب والاستدلال، ودوال الخسائر والمُحسِّنات، والزيادة في التخصيص (overfitting) والنقص في التخصيص (underfitting)، وسيرشدك خلال بناء نموذج التعلم الآلي الأول الخاص بك باستخدام مكتبة sklearn.

1. ما ستتعلمه



2. قصة حقيقية عن المبالغة في التدريب (Overfitting)

(1) نقطة الألم: 99% في التدريب، 65% في الاختبار

درّبت أليس نموذجاً للتنبؤ بأسعار المنازل باستخدام sklearn. وصلت قيمة R² لمجموعة التدريب إلى 0.99، لكنها كانت 0.65 فقط لمجموعة الاختبار. ظنّت أنها وجدت النموذج المثالي — إلى أن قامت بالتنبؤات على بيانات العالم الحقيقي، والتي كشفت عن تناقض كبير.

(2) تشخيص المبالغة في التدريب (Overfitting)

شرح تشارلي: "لقد 'حفظ' نموذجك بيانات التدريب. هذا ليس تعلماً — إنه مبالغة في التدريب (Overfitting). إنه كطالب يحفظ الإجابات لكنه لا يعرف كيفية حل المشاكل — لن يتمكن من التعامل مع مشكلة جديدة."

▶ مثال: توضيح المبالغة في التدريب باستخدام عمق شجرة القرار (الصعوبة: ⭐⭐)

PYTHON
# Demonstrate overfitting with decision tree depth
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Overfitted model: very deep tree
deep_tree = DecisionTreeClassifier(max_depth=None, random_state=42)
deep_tree.fit(X_train, y_train)

# Regularized model: shallow tree
shallow_tree = DecisionTreeClassifier(max_depth=3, random_state=42)
shallow_tree.fit(X_train, y_train)

print("=== Overfitting Demo ===")
print(f"Deep tree (no limit):  Train={deep_tree.score(X_train, y_train):.3f}  Test={deep_tree.score(X_test, y_test):.3f}")
print(f"Shallow tree (depth=3): Train={shallow_tree.score(X_train, y_train):.3f}  Test={shallow_tree.score(X_test, y_test):.3f}")
💻 المخرجات:

TEXT 📖 للعرض فقط
=== Overfitting Demo ===
Deep tree (no limit):  Train=1.000  Test=1.000
Shallow tree (depth=3): Train=1.000  Test=1.000
💡 نصيحة: مجموعة بيانات Iris بسيطة جداً؛ حتى الشجرة الضحلة يمكنها تحقيق دقة 100%. لاحقاً، سنستخدم مجموعات بيانات أكثر تعقيداً لتوضيح المبالغة الحقيقية في التدريب.

(3) الفوائد: فهم قدرة التعميم (Generalization)

تعلمت أليس مبدأً أساسياً: قيمة النموذج لا تكمن في أدائه على مجموعة التدريب، بل في أدائه على مجموعة الاختبار — هذا ما يُعرف بـ "قدرة التعميم" (Generalization Ability).


3. الخوارزميات مقابل النماذج مقابل البرامج

هذه المفاهيم الثلاثة يسهل الخلط بينها ويجب التمييز بينها بوضوح:

المفهوم التعريف التشبيه دورة الحياة
الخوارزمية طريقة رياضية للتعلم وصفة طبخ (طريقة للطهي) تبقى ثابتة؛ لا تتغير مع البيانات
النموذج نتيجة تدريب خوارزمية على بيانات طبق تم تحضيره وفقًا لوصفة يمكن إعادة تدريبه مع تغير البيانات
البرنامج تسلسل ثابت من التعليمات خط تجميع مصنّع تعديل الكود يدويًا

▶ مثال: العملية من خوارزمية + بيانات ← نموذج (الصعوبة: ⭐)

TEXT 📖 للعرض فقط
Algorithm + Data → Training → Model

Example:
Linear Regression Algorithm + House Price Data → Training → Price Prediction Model
(model contains learned weights: price = 2500 * area + 15000 * rooms - 5000)


4. التدريب والاستدلال

(1) التدريب

التدريب هو العملية التي يتعلم من خلالها النموذج المعلمات من البيانات:

100%
graph TB
    A[بيانات التدريب<br/>X: السمات، y: العلامات] --> B[الخوارزمية<br/>مثال: الانحدار الخطي]
    B --> C[المواجهة الأمامية<br/>إجراء التنبؤ]
    C --> D[حساب الخسارة<br/>ما مدى خطأ التنبؤ؟]
    D --> E[المواجهة الخلفية<br/>حساب التدرجات]
    E --> F[تحديث الأوزان<br/>تعديل المعلمات]
    F --> C
    G{هل الخسارة منخفضة بما يكفي؟} -->|لا| C
    G -->|نعم| H[النموذج المدرب]

(2) الاستدلال

يتعلق الاستدلال باستخدام نموذج مدرب لإجراء تنبؤات على بيانات جديدة:

PYTHON
# التدريب: يتعلم النموذج من البيانات
# model.fit(X_train, y_train)

# الاستدلال: يتنبأ النموذج على بيانات جديدة
# predictions = model.predict(X_new)
البُعد التدريب الاستدلال
الغرض تدريب المعلمات استخدام المعلمات للتنبؤات
المُدخل السمات + العلامات السمات فقط
المُخرج النموذج المدرب نتائج التنبؤ
التعقيد الحسابي مرتفع (تكرارات متعددة) منخفض (مرة أمامية واحدة)
التكرار من حين لآخر (أثناء إعادة التدريب) بشكل متكرر (مع كل طلب)
التشبيه طلاب يدرسون للامتحانات طلاب يؤدون الامتحانات


5. دوال الخسارة والمُحسِّنات

(1) دالة الخسارة - قياس "مدى خطأك"

تقيس دالة الخسارة التباين بين تنبؤات القيم الفعلية للنموذج ؛ كلما كانت الخسارة أقل، كان ذلك أفضل:

دالة الخسارة الحدس خلف الصيغة المهام المناسبة
MSE (متوسط مربع الخطأ) متوسط مربعات الفروق بين القيم المتوقعة والقيم الفعلية الانحدار
MAE (متوسط القيمة المطلقة للخطأ) متوسط القيم المطلقة للفروق بين القيم المتوقعة والقيم الفعلية الانحدار
الإنتروبيا المتقاطعة الفرق بين توزيع الاحتمال المتوقع والتوزيع الحقيقي التصنيف

▶ مثال: حساب يدوي لدوال خسارة MSE و MAE و RMSE (الصعوبة: ⭐⭐)

PYTHON
# Calculate different loss functions manually
import numpy as np

y_true = np.array([200000, 300000, 250000])  # Actual prices
y_pred = np.array([210000, 280000, 260000])  # Predicted prices

# Mean Squared Error
mse = np.mean((y_true - y_pred) ** 2)
print(f"MSE:  {mse:,.0f}")

# Mean Absolute Error
mae = np.mean(np.abs(y_true - y_pred))
print(f"MAE:  {mae:,.0f}")

# Root Mean Squared Error (easier to interpret — same unit as y)
rmse = np.sqrt(mse)
print(f"RMSE: {rmse:,.0f}")
💻 المخرجات:

TEXT 📖 للعرض فقط
MSE:  200,000,000
MAE:  10,000
RMSE: 14,142

(2) المُحسِّن - يحدد "كيفية الضبط"

يُحدّث المُحسِّن معلمات النموذج بناءً على الانحدار (الاتجاه) لدالة الخسارة:

المُحسِّن الميزات حالات الاستخدام
SGD الطريقة الأساسية ؛ تخطو خطوة واحدة في اتجاه الانحدار المهام البسيطة، العروض التوضيحية التعليمية
SGD + الزخم يُضيف الزخم، ويُقلل من التذبذب المهام المتوسطة
Adam معدل تعلم تكيّفي، الأكثر استخدامًا معظم مهام التعلم العميق
AdamW Adam + انحلال الوزن لمنع الإفراط في التوافق تدريب نماذج المحول
💡 نصيحة: فكّر في المُحسِّن بهذه الطريقة: أنت واقف على جبل وتريد النزول (تقليل الخسارة) ؛ يخبرك الانحدار أي الاتجاهات هو الأشد، ويحدد معدل تعلم مسافة كل خطوة تخطوها. يشبه Adam تعديل طول خطواتك تلقائيًا، حيث يتخذ خطوات صغيرة على المنحدرات الحادة وخطوات أكبر على التضاريس المستوية.



6. الملاءمة الزائدة والملاءمة الناقصة

الحالة أداء مجموعة التدريب أداء مجموعة الاختبار المقارنة السبب
الملاءمة الناقصة ضعيف ضعيف الطلاب لم يتعلموا جيدًا؛ لا يعرفون شيئًا النموذج بسيط جدًا / التدريب غير كافٍ
الملاءمة الطبيعية جيد جيد الطلاب أتقنوا المفهوم ويمكنهم تطبيقه على مواقف مشابهة للنموذج مستوى مناسب من التعقيد
الملاءمة الزائدة ممتاز ضعيف الطلاب حفظوا الإجابات لكنهم لا يستطيعون حل المسائل النموذج معقد جدًا / البيانات قليلة جدًا

(1) الأسباب الشائعة للملاءمة الزائدة والحلول المضادة

السبب الحل
النموذج معقد جدًا (عدد كبير جدًا من المعلمات) تقليل عدد الطبقات/العُقد، تطبيق التنظيم (L1/L2)
بيانات التدريب غير كافية جمع المزيد من البيانات، زيادة البيانات
عدد كبير جدًا من تكرارات التدريب الإيقاف المبكر
عدد كبير جدًا من الميزات اختيار الميزات، تقليل الأبعاد

(2) المفاضلة بين التحيُّز والتباين

TEXT 📖 للعرض فقط
الملاءمة الناقصة ←─────────────────────→ الملاءمة الزائدة
تحيُّز عالٍ        توازن جيد        تباين عالٍ
(نموذج بسيط)   (التعقيد المناسب)  (نموذج معقد)

الهدف: إيجاد النقطة المثلى بين التحيُّز والتباين


7. مقياسات تقييم النموذج

(1) مؤشرات التقييم المصنفة

▶ مثال: حساب مقيمات تقييم التصنيف — الدقة، الاستدعاء، الدقة (Precision)، و F1 (الصعوبة: ⭐⭐)

PYTHON
# Classification metrics demo
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 0]

acc = accuracy_score(y_true, y_pred)
prec = precision_score(y_true, y_pred)
rec = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print("=== Classification Metrics ===")
print(f"Accuracy:  {acc:.3f} — Overall correctness")
print(f"Precision: {prec:.3f} — Of predicted positives, how many correct?")
print(f"Recall:    {rec:.3f} — Of actual positives, how many found?")
print(f"F1 Score:  {f1:.3f} — Harmonic mean of precision & recall")
💻 المخرجات:

TEXT 📖 للعرض فقط
=== Classification Metrics ===
Accuracy:  0.800 — Overall correctness
Precision: 0.800 — Of predicted positives, how many correct?
Recall:    0.800 — Of actual positives, how many found?
F1 Score:  0.800 — Harmonic mean of precision & recall
المقياس المعنى البديهي للصيغة متى يكون مهماً
الدقة (Accuracy) التنبؤات الصحيحة / إجمالي التنبؤات عندما تكون الفئات متوازنة
الدقة (Precision) الإيجابيات الحقيقية / (الإيجابيات الحقيقية + الإيجابيات الكاذبة) تكلفة عالية للإيجابيات الكاذبة (مثلًا، تصفية البريد المزعج)
الاستدعاء (Recall) الإيجابيات الحقيقية / (الإيجابيات الحقيقية + السلبيات الكاذبة) تكلفة عالية للسلبيات الكاذبة (مثلًا، فحص السرطان)
F1 الوسط التوافقي بين الدقة (Precision) والاستدعاء يتطلب توازناً بين الدقة والاستدعاء

▶ مثال: تصور المفاضلة بين التحيز والتباين (الصعوبة: ⭐)

(2) مقيمات تقييم الانحدار

المقياس المعنى نطاق القيمة جيد/سيئ
MAE الخطأ المطلق المتوسط [0, +∞) كلما قل، كان أفضل
MSE متوسط مربع الخطأ [0, +∞) كلما قل، كان أفضل
RMSE جذر متوسط مربع الخطأ (بنفس وحدات y) [0, +∞) كلما قل، كان أفضل
معامل التحديد (نسبة التباين المفسر) (-∞, 1] كلما اقترب من 1، كان أفضل


8. مثال كامل: العملية الكاملة لبناء نموذج التعلم الآلي الأول الخاص بك

قم بتدريب مصنف شجرة القرار على مجموعة بيانات Iris باستخدام sklearn للحصول على تجربة كاملة في "تدريب نموذج الذكاء الاصطناعي وتقييمه":

▶ مثال: نموذج التعلم الآلي الأول من البداية إلى النهاية—Iris تصنيف شجرة القرار (الصعوبة: ⭐⭐⭐)

PYTHON
# ============================================
# First ML Model: Complete Workflow
# Dataset: Iris (flower classification)
# Algorithm: Decision Tree
# ============================================

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report, confusion_matrix
import numpy as np

# Step 1: Load data
iris = load_iris()
X, y = iris.data, iris.target
print(f"Dataset: {X.shape[0]} samples, {X.shape[1]} features")
print(f"Features: {iris.feature_names}")
print(f"Classes: {list(iris.target_names)}")

# Step 2: Split data
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)
print(f"\nTrain: {len(X_train)} samples | Test: {len(X_test)} samples")

# Step 3: Train model
model = DecisionTreeClassifier(max_depth=3, random_state=42)
model.fit(X_train, y_train)
print(f"\nModel trained: Decision Tree (max_depth=3)")

# Step 4: Predict
y_pred = model.predict(X_test)

# Step 5: Evaluate
train_acc = model.score(X_train, y_train)
test_acc = model.score(X_test, y_test)
print(f"\nTraining accuracy: {train_acc:.3f}")
print(f"Test accuracy:     {test_acc:.3f}")

print("\n=== Classification Report ===")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

print("=== Confusion Matrix ===")
print(confusion_matrix(y_test, y_pred))

# Step 6: Predict on new data
new_sample = np.array([[5.1, 3.5, 1.4, 0.2]])  # A likely setosa
prediction = model.predict(new_sample)
print(f"\nNew sample prediction: {iris.target_names[prediction[0]]}")
💻 المخرجات:

TEXT 📖 للعرض فقط
Dataset: 150 samples, 4 features
Features: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Classes: ['setosa', 'versicolor', 'virginica']

Train: 105 samples | Test: 45 samples

Model trained: Decision Tree (max_depth=3)

Training accuracy: 1.000
Test accuracy:     1.000

=== Classification Report ===
              precision    recall  f1-score   support
      setosa       1.00      1.00      1.00        15
  versicolor       1.00      1.00      1.00        15
   virginica       1.00      1.00      1.00        15
    accuracy                           1.00        45
   macro avg       1.00      1.00      1.00        45
weighted avg       1.00      1.00      1.00        45

=== Confusion Matrix ===
[[15  0  0]
 [ 0 15  0]
 [ 0  0 15]]

New sample prediction: setosa
💡 نصيحة: مجموعة بيانات Iris "نظيفة" جدًا (الأنماط الثلاثة للزهور متميزة للغاية)، لذا فإن نسبة الدقة 100% ليست مفاجئة. البيانات في المشاريع الواقعية أكثر تعقيدًا بكثير من ذلك—وهذا بالضبط ما سنستكشفه بمزيد من التعمق في الدروس التالية.


❓ أسئلة شائعة

س ما الفرق بين التدريب والاستدلال؟
ج التدريب هي عملية "التعلم" – حيث يتعلم النموذج المعلمات من البيانات، وهي عملية تستهلك الوقت والموارد الحاسوبية بكثرة. أما الاستدلال فهو عملية "التطبيق" – باستخدام المعلمات المتعلمة للتنبؤ ببيانات جديدة، وهي عملية سريعة وخفيفة حسابيًا. مقارنة: التدريب = طالب يذاكر؛ الاستدلال = طالب يخوض اختبارًا.
س هل تكون دالة الخسارة الأصغر دائمًا أفضل؟
ج الخسارة الأصغر على مجموعة التدريب أفضل، لكن يجب أيضًا الانتباه إلى الخسارة على مجموعة الاختبار. إذا كانت الخسارة على مجموعة التدريب منخفضة للغاية لكن الخسارة على مجموعة الاختبار مرتفعة، فهذا يشير إلى حدوث تملص (overfitting) – أي أن النموذج "حفظ الإجابات". النموذج الجيد يجب أن يظهر أداءً جيدًا على مجموعتي التدريب والاختبار معًا.
س كيف يمكن معالجة التملص (overfitting)؟
ج النهج الأساسي هو تقليل تعقيد النموذج أو زيادة كمية البيانات: ① تقليل عدد معاملات النموذج (شبكات أضحل / أعماق أشجار أصغر)؛ ② التنظيم (L1/L2/Dropout)؛ ③ تعزيز البيانات (Data augmentation)؛ ④ التوقف المبكر (إيقاف التدريب عندما تتوقف خسارة مجموعة التحقق عن الانخفاض)؛ ⑤ التعلم المجمع (التصويت بين عدة نماذج).
س هل تعني نسبة دقة 99% بالضرورة أنه نموذج جيد؟
ج ليس بالضرورة. إذا كانت البيانات تتكون من 99% حالات طبيعية و1% حالات شاذة، فسيحقق النموذج نسبة دقة 99% بمجرد التنبؤ بـ "طبيعي" لجميع الحالات – لكنه لم يتعلم شيئًا على الإطلاق. بالنسبة للبيانات المائلة من هذا النوع، تحتاج إلى تقييم النموذج باستخدام الدقة (Precision)، والاستدعاء (Recall)، ودرجة F1 (F1 score)؛ لا يمكنك الاعتماد فقط على الدقة.
س لماذا نحتاج إلى مجموعة تحقق بالإضافة إلى مجموعة التدريب ومجموعة الاختبار؟
ج مجموعة التحقق تُستخدم لضبط المعاملات الفائقة (مثل عمق الشجرة ومعدل التعلم)، بينما تُستخدم مجموعة الاختبار للتقييم النهائي. إذا قمت بضبط المعاملات الفائقة باستخدام مجموعة الاختبار، فكأن النموذج قد "رأى" بيانات مجموعة الاختبار بشكل غير مباشر – مما سيجعل التقييم متحيزًا. مجموعة التحقق "لضبط المعاملات الفائقة فقط"، ومجموعة الاختبار "للإبلاغ فقط"؛ لكل منها غرضها المحدد.
س ماذا يعني أن تكون قيمة R² سالبة؟
ج R² = 1 يشير إلى تنبؤ مثالي؛ R² = 0 يعني أن النموذج يعادل "التخمين العشوائي للمتوسط"؛ و R² < 0 يعني أن النموذج يعود أداءً أسوأ من "تخمين المتوسط". عادةً ما تشير قيمة R² السالبة إلى أن النموذج يعاني من تملص شديد (underfit) أو أن تم اختيار خوارزمية خاطئة.

📖 ملخص


📝 تمارين

  1. مشكلة أساسية (الصعوبة ⭐): استخدم مكتبة sklearn لتدريب DecisionTreeClassifier على مجموعة بيانات Iris، واطبع دقة التدريب والاختبار.
  2. مشكلة متقدمة (الصعوبة ⭐⭐): احسب Precision و Recall للنموذج (تلميح: classification_report)، واشرح معنى كل مقياس.
  3. تحدي (الصعوبة: ⭐⭐⭐): تسبب عمدًا في overfitting—قم بتدريب شجرة عميقة بلا حدود (max_depth=None)، ثم قارن الاختلافات في دقة التدريب والاختبار بين الأشجار الضحلة والعميقة على مجموعة بيانات أكثر تعقيدًا (مثل load_wine).
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%