AI: مقدمة في تعلّم الآلة

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

التعلم الآلي (ML) هو أكثر الحقول الفرعية الأساسية للذكاء الاصطناعي - فجميع تطبيقات الذكاء الاصطناعي الحديثة تقريبًا (أنظمة التوصية، التعرف على الصوت، القيادة الذاتية) مبنية على التعلم الآلي. ستساعدك هذه الفصل على فهم جوهر التعلم الآلي، وثلاثة أنماطه الرئيسية، وأنواع المهام التي يعالجها، وسيرشدك خلال تنفيذ أول مصنف للتعلم الآلي مكتمل باستخدام مكتبة sklearn.

1. ما ستتعلمه



2. القصة: عندما تكون هناك قواعد كثيرة لا يمكن حصرها

(1) نقطة الضعف: كلما زادت القواعد المكتوبة، انخفضت الدقة

تحتاج شركة التجارة الإلكترونية الخاصة بـ بوب إلى التنبؤ بما إذا كان المستخدمون سيشترون منتجًا معينًا. بدأ في كتابة القواعد:

TEXT 📖 للعرض فقط
IF age > 30 AND browse_count > 3 THEN buy = yes
IF age < 25 AND cart_count > 0 THEN buy = maybe
IF region = "east" AND discount > 20% THEN buy = yes
... (300 قاعدة إضافية لاحقًا) ...

لقد قمنا بتوسيع القواعد من 10 إلى 300، لكن نسبة الدقة ارتفعت من 60% إلى 72% ثم توقفت عن التحسن. في كل مرة يتم فيها تقديم فئة منتج جديدة، يجب علينا إعادة كتابة القواعد من جديد - إنه أمر مستحيل إتمامه.

(2) حلول التعلم الآلي

اقترحت أليس: "دعونا لا نكتب أي قواعد - ودع الخوارزمية تجد الأنماط بنفسها من 100 ألف سجل تاريخي."

▶ مثال: التنبؤ بسلوك الشراء القائم على القواعد مقابل القائم على البيانات (الصعوبة: ⭐)

PYTHON
# Rule-based approach: you write the logic
def will_buy_rules(user):
    """Predict purchase using hand-written rules"""
    if user['age'] > 30 and user['browse_count'] > 3:
        return True
    if user['cart_count'] > 0 and user['discount_pct'] > 20:
        return True
    return False

# ML approach: algorithm learns from data
# from sklearn.neighbors import KNeighborsClassifier
# model = KNeighborsClassifier(n_neighbors=5)
# model.fit(X_train, y_train)  # Learns patterns from 100K records
# prediction = model.predict(new_user_data)

المخرجات: (قم بتشغيل المثال لرؤية المخرجات الفعلية، أو راجع ملاحظة المخرجات المتوقعة في تعليقات الكود أعلاه.)

(3) العوائد: من 72% إلى 89%

درب بوب نموذجًا باستخدام التعلم الآلي، فقفزت الدقة من 72% إلى 89%. علاوة على ذلك، بالنسبة لفئات المنتجات الجديدة، كل ما هو مطلوب هو إضافة المزيد من البيانات وإعادة تدريب النموذج - دون كتابة سطر واحد من القواعد.


3. ما هو التعلم الآلي؟

(1) تعريف آرثر صمويل (1959)

"التعلم الآلي هو مجال الدراسة الذي يمنح أجهزة الكمبيوتر القدرة على التعلم دون برمجتها بشكل صريح."

الفكرة الأساسية: لا يتعلق الأمر بكتابة قواعد يتبعها الكمبيوتر؛ بل يتعلق بتوفير البيانات حتى يتمكن الكمبيوتر من تعلم القواعد بنفسه.

(2) تعريف توم ميتشل (1997)

"يُقال إن برنامج كمبيوتر يتعلم من الخبرة E فيما يتعلق بفئة من المهام T ومقياس الأداء P، إذا تحسنت أداؤه في المهام ضمن T، كما يُقاس بمقياس P، مع المزيد من الخبرة E."

ببساطة: عندما يتحسن أداء البرنامج P على المهمة T مع زيادة خبرته E، يُقال إنه "يتعلم".

لنأخذ سيناريو بوب كمثال:

الرمز المعنى المقابل
T المهمة التنبؤ بما إذا كان المستخدم سيشتري
E الخبرة 100,000 سجل شراء تاريخي
P الأداء دقة التنبؤ

(3) القواعد التقليدية مقابل التعلم الآلي

البُعد القواعد التقليدية التعلم الآلي
مصدر القاعدة مكتوبة يدويًا تم تعلمها بواسطة خوارزمية من البيانات
قابلية التوسع ضعيفة (تتوسع القواعد مع السيناريو) جيدة (يمكن إعادة التدريب ببيانات جديدة)
التكيف مع التغييرات يتطلب تعديلات يدوية للقواعد يتكيف تلقائيًا مع التغيرات في توزيع البيانات
اكتشاف الأنماط المخفية صعب (لا يمكن العثور على أنماط لا يستطيع الناس التفكير فيها) ممكن (يمكن للخوارزميات اكتشاف تركيبات غير خطية)
قابلية التفسير قوية (القواعد واضحة من النظرة الأولى) ضعيفة (النموذج "صندوق أسود"، ولكن يمكن تفسيره)
تكاليف التطوير منخفضة عندما تكون القواعد بسيطة؛ مرتفعة للغاية عندما تكون معقدة تتطلب بيانات وقوة حسابية في المراحل المبكرة؛ تكاليف منخفضة لاحقًا
المقارنة أنت تُعلم الطفل كل خطوة بالخطوة أنت تعرض على الطفل 1,000 مشكلة وتتركه يكتشفها بنفسه


4. الأنماط الثلاثة الرئيسية: التعلم الخاضع للإشراف / غير الخاضع للإشراف / التعزيزي

ينقسم تعلم الآلة إلى ثلاثة أنماط رئيسية بناءً على "أساليب التعلم":

100%
graph TB
    ML[تعلم الآلة] --> SL[التعلم الخاضع للإشراف]
    ML --> UL[التعلم غير الخاضع للإشراف]
    ML --> RL[التعلم التعزيزي]

    SL --> SL1[التصنيف]
    SL --> SL2[الانحدار]

    UL --> UL1[التجميع]
    UL --> UL2[تقليل الأبعاد]

    RL --> RL1[الذكاء الاصطناعي للألعاب]
    RL --> RL2[التحكم في الروبوتات]

    style ML fill:#e8f5e9
    style SL fill:#e1f5fe
    style UL fill:#fff3e0
    style RL fill:#f3e5f5

(1) التعلم الخاضع للإشراف (Supervised Learning)

الميزة الرئيسية: بيانات التدريب مُعلَّمة (مع الإجابات).

تشبه معلمًا يوجه الطلاب خلال مسائل تدريبية - كل مسألة لها إجابة معيارية، ويتعلم الطلاب باتباع عملية "حل المسائل → التحقق من الإجابات → تصحيح الأخطاء".

العنصر الوصف
المُدخَلات السمات X + التسمية y
عملية التعلم إيجاد دالة التعيين من X إلى Y
المُخرَجَات نموذج قادر على التنبؤ بالقيمة y لقيم X جديدة
المهام النموذجية التصنيف (تسميات منفصلة)، الانحدار (تسميات مستمرة)
أمثلة التنبؤ بأسعار المنازل بناءً على حجم العقار وموقعه (انحدار)؛ تحديد ما إذا كان البريد الإلكتروني بريدًا غير مرغوب فيه بناءً على محتواه (تصنيف)

▶ مثال: تحميل مجموعة بيانات الزهرة السوسنية باستخدام sklearn وإجراء التصنيف (الصعوبة: ⭐)

PYTHON
# Load the Iris dataset and inspect its structure
from sklearn.datasets import load_iris

iris = load_iris()
print(f"Feature names: {iris.feature_names}")
print(f"Target names:  {list(iris.target_names)}")
print(f"Samples:       {iris.data.shape[0]}")
print(f"Features:      {iris.data.shape[1]}")
print(f"\nFirst 5 samples:")
for i in range(5):
    print(f"  {iris.data[i]} → {iris.target_names[iris.target[i]]}")
💻 المُخرَجَات:

TEXT 📖 للعرض فقط
Feature names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
Target names:  ['setosa', 'versicolor', 'virginica']
Samples:       150
Features:      4

First 5 samples:
  [5.1 3.5 1.4 0.2] → setosa
  [4.9 3.0 1.4 0.2] → setosa
  [4.7 3.2 1.3 0.2] → setosa
  [4.6 3.1 1.5 0.2] → setosa
  [5.0 3.6 1.4 0.2] → setosa

(2) التعلم غير الخاضع للإشراف (Unsupervised Learning)

الميزة الرئيسية: بيانات التدريب غير مُعلَّمة.

يشبه إعطاء طفلًا كومة من الصور وتركه يرتبها بنفسه بناءً على "شكلها" - دون أن يخبره أحد، "هذه قطة" أو "ذلك كلب".

العنصر الوصف
المُدخَلات السمات X فقط، بدون تسمية y
عملية التعلم اكتشاف البنية والأنماط الجوهرية للبيانات
المُخرَجَات تجميع البيانات، بنيتها، وتمثيلها المضغوط
المهام النموذجية التجميع، تقليل الأبعاد، كشف الشذوذ
أمثلة تقسيم العملاء إلى شرائح (عدد الشرائح غير معروف؛ يحددها الخوارزمية تلقائيًا)، توصيات المنتجات (تحديد أنماط الشراء)

(3) التعلم التعزيزي (Reinforcement Learning)

الميزة الرئيسية: التعلم من خلال التجربة والخطأ وإشارات المكافأة.

يشبه تمامًا تدريب جرو - أعه وجبة خفيفة (مكافأة) عندما يفعل شيئًا صحيحًا، وتجاهله (عقوبة) عندما يفعل شيئًا خاطئًا. يتعلم الجرو تدريجيًا أي السلوكيات تكسبه مكافأة.

العنصر الوصف
المُدخَلات حالة البيئة + مساحة الإجراءات
عملية التعلم تجربة وخطأ → تلقي مكافأة/عقوبة → ضبط الاستراتيجية
المُخرَجَات الاستراتيجية التي تُعظم المكافآت التراكمية في البيئة
المهام النموذجية الذكاء الاصطناعي للألعاب، التحكم في الروبوتات، اتخاذ القرارات في القيادة ذاتية التشغيل
أمثلة AlphaGo في لعبة غو، التعلم التعزيزي البشري التوجيهي (RLHF) المستخدم في ChatGPT

(4) مقارنة بين الأنماط الثلاثة

البُعد التعلم الخاضع للإشراف التعلم غير الخاضع للإشراف التعلم التعزيزي
البيانات مُعلَّمة (X + y) غير مُعلَّمة (X فقط) حالة + إشارة مكافأة
الهدف التنبؤ بالتسمية اكتشاف البنية تعظيم المكافأة
التغذية الراجعة فورية (تخبرك ما إذا كنت مصيبًا أم مخطئًا) لا يوجد (لا يوجد صواب أو خطأ) متأخرة (لا تعرف ما إذا كان جيدًا أم سيئًا حتى تتخذ خطوات كثيرة)
الخوارزميات النموذجية KNN، SVM، أشجار القرار K-Means، PCA، DBSCAN Q-Learning، PPO، SAC
التطبيقات النموذجية كشف البريد غير المرغوب فيه، التنبؤ بأسعار المنازل تقسيم العملاء، تقليل الأبعاد الذكاء الاصطناعي للألعاب، الروبوتات، القيادة ذاتية التشغيل
متطلبات البيانات تكاليف تعليق مرتفعة البيانات سهلة الوصول يتطلب بيئة محاكاة
التشبيه معلم يوجه الطلاب في حل المسائل قراءة كتاب بنفسك لاكتشاف الأنماط تدريب جرو على أداء حيل


5. أنواع المهام: التصنيف / الانحدار / التجميع

(1) التصنبف (Classification)

التنبؤ بـعلامات فئات منفصلة. على سبيل المثال: هل البريد الإلكتروني هو بريد مزعج (spam) أم لا؟ هل الصورة هي لقطة أم لكلب؟

النوع الوصف مثال
التصنيف الثنائي فئتان فقط بريد مزعج/عادي، احتيال/مشروع
فئات متعددة 3 فئات أو أكثر 3 أنواع من زهرة السوسن، الأرقام المكتوبة بخط اليد من 0 إلى 9

(2) الانحدار (Regression)

التنبؤ بـقيم مستمرة. على سبيل المثال: ما هو سعر المنزل؟ ما هي درجة الحرارة غداً؟

(3) التجميع (Clustering)

تجميع تلقائي للبيانات بناءً على التشابه، دون فئات محددة مسبقاً. على سبيل المثال: تقسيم العملاء تلقائياً إلى 3 مجموعات.

(4) مقارنة بين التصنيف والانحدار والتجميع

البُعد التصنيف الانحدار التجميع
نوع المخرجات فئات منفصلة قيم مستمرة علامات مجموعات
هل تتطلب تسميات؟ نعم (تعلم خاضع للإشراف) نعم (تعلم خاضع للإشراف) لا (تعلم غير خاضع للإشراف)
الهدف التنبؤ بالفئة التي ينتمي إليها العينة التنبؤ بقيمة محددة تحديد التجميعات الطبيعية في البيانات
مقياس التقييم الدقة / F1 MAE / RMSE / R² معامل ظلوي / القصور الذاتي
مثال تحديد ما إذا كان مستخدم قد قام بعملية شراء أم لا التنبؤ بمبلغ إنفاق المستخدم تقسيم المستخدمين تلقائياً إلى عدة مجموعات
مقياس تشبيهي تحديد ما إذا كانت قطعة فاكهة هي تفاحة أم برتقالة تقدير وزن قطعة فاكهة ترتيب سلة من الفواكه المتنوعة إلى أكوام عدة بناءً على مظهرها


6. نظرة عامة على سير عمل التعلم الآلي

يتكون مشروع التعلم الآلي الكامل من ست خطوات، لا يمكن تخطي أي منها:

100%
graph TB
    A[1. تحديد المشكلة] --> B[2. جمع البيانات]
    B --> C[3. هندسة الميزات]
    C --> D[4. تدريب النموذج]
    D --> E[5. التقييم]
    E --> F{جيد بما يكفي؟}
    F -->|لا| C
    F -->|نعم| G[6. النشر]
    G --> H[المراقبة وإعادة التدريب]

    style A fill:#e1f5fe
    style B fill:#e8f5e9
    style C fill:#fff3e0
    style D fill:#f3e5f5
    style E fill:#fce4ec
    style G fill:#e0f2f1
    style H fill:#f1f8e9

(1) تحديد المشكلة

حدد المشكلة المراد حلها بوضوح، سواء كانت المهمة تتعلق بالتصنيف أو الانحدار، وما هي معايير النجاح.

تعريف جيد للمشكلة تعريف ضعيف للمشكلة
"التنبؤ بأن المستخدمين سيشترون منتجًا خلال 7 أيام" "دع الذكاء الاصطناعي يساعدنا في بيع المزيد"
"كشف المعاملات الاحتيالية ببطاقات الائتمان (F1 ≥ 0.9)" "كشف المعاملات غير الطبيعية"

(2) جمع البيانات

البيانات هي حجر الأساس في التعلم الآلي. تحدد جودة البيانات بشكل مباشر الحد الأقصى لأداء النموذج.

بُعد البيانات بيانات جيدة بيانات ضعيفة
الحجم كافٍ (بآلاف السجلات على الأقل) قليل جدًا (بضع عشرات السجلات)
الجودة تسميات دقيقة، ميزات كاملة تسميات خاطئة، قيم مفقودة كثيرة
التنوع تغطي مجموعة متنوعة من السيناريوهات تغطي سيناريو واحدًا فقط

(3) هندسة الميزات

تحويل البيانات الأولية إلى ميزات رقمية يمكن للنموذج فهمها:

TEXT 📖 للعرض فقط
بيانات أولية ← هندسة الميزات ← ميزات
"ذكر من بكين يبلغ من العمر 25 عامًا" ← [25, 1, 39] (العمر، رمز_الجنس، رمز_المدينة)

(4) تدريب النموذج

اختر خوارزمية، حدد المعاملات الفوقية، وقم بتدريب النموذج على بيانات التدريب.

(5) تقييم النموذج

قم بتقييم الأداء على مجموعة الاختبار (بيانات لم يرها النموذج من قبل) لضمان قدرة النموذج على التعميم.

(6) النشر والإطلاق

انشر النموذج كواجهة برمجة تطبيقات (API) أو قم بتضمينه في تطبيق، وراقب أستمرار أداءه، وأعد تدريبه بشكل دوري.


7. النموذج الموحد لواجهة sklearn

مكتبة scikit-learn (sklearn) هي مكتبة التعلم الآلي الأكثر شعبية لـ Python، وتصميم واجهتها التطبيقية (API) متسق تمامًا — جميع النماذج تتبع نفس مجموعة من الواجهات:

TEXT 📖 للعرض فقط
model = SomeClassifier(params)    # 1. إنشاء النموذج
model.fit(X_train, y_train)      # 2. تدريب النموذج
model.predict(X_new)             # 3. التنبؤ
model.score(X_test, y_test)      # 4. التقييم

▶ مثال: التدريب والتنبؤ باستخدام مصنف KNN (الصعوبة: ⭐⭐)

PYTHON
# مصنف KNN: التدريب والتنبؤ
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# تحميل البيانات وتقسيمها
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, stratify=y
)

# إنشاء النموذج وتدريبه
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# التنبؤ
y_pred = knn.predict(X_test)

# التقييم
train_acc = knn.score(X_train, y_train)
test_acc = knn.score(X_test, y_test)
print(f"دقة التدريب: {train_acc:.3f}")
print(f"دقة الاختبار: {test_acc:.3f}")

# التنبؤ بعينة جديدة
import numpy as np
new_sample = np.array([[5.0, 3.4, 1.5, 0.2]])
pred = knn.predict(new_sample)
print(f"الفئة المتوقعة للعينة الجديدة: {load_iris().target_names[pred[0]]}")
💻 المخرجات:

TEXT 📖 للعرض فقط
Train accuracy: 0.971
Test accuracy:  0.978
New sample predicted class: setosa

(1) مرجع سريع لمشتقات sklearn الشائعة

المصنف اسم الفئة المعلمات الرئيسية الميزات
KNN KNeighborsClassifier n_neighbors بديهي وبسيط، مناسب لمجموعات البيانات الصغيرة
شجرة القرار DecisionTreeClassifier max_depth قابلية عالية للتفسير، معرّض للإفراط في التجهيز
الغابة العشوائية RandomForestClassifier n_estimators طريقة تجميعية، شديدة الصلابة
SVM SVC C, kernel دقة عالية مع مجموعات البيانات الصغيرة
الانحدار اللوجستي LogisticRegression C خط أساس خطي، مخرجات احتمالية
نايف بايز GaussianNB يُستخدم بشكل شائع في تصنيف النصوص؛ سريع للغاية
💡 نصيحة: تدعم جميع مشتقات sklearn الثلاثية fit() / predict() / score() — للتبديل بين الخوارزميات، كل ما عليك تغيير اسم الفئة في سطر واحد فقط.



8. مثال كامل: استخدام KNN لإكمال تدفق عمل التعلم الآلي بالكامل على مجموعة بيانات آيريس

فيما يلي مثال كامل يشرح تدفق عمل التعلم الآلي بالكامل، من تحميل البيانات إلى حدود القرار للتصور:

▶ مثال: مقارنة دقة الأداء لقيم k المختلفة (الصعوبة: ⭐⭐)

PYTHON
# Compare KNN with different k values
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

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, stratify=y
)

print("=== KNN: Effect of k value ===")
for k in [1, 3, 5, 7, 9, 15, 30]:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    train_acc = knn.score(X_train, y_train)
    test_acc = knn.score(X_test, y_test)
    print(f"k={k:2d} | Train: {train_acc:.3f} | Test: {test_acc:.3f}")
💻 المخرجات:

TEXT 📖 للعرض فقط
=== KNN: Effect of k value ===
k= 1 | Train: 1.000 | Test: 0.956
k= 3 | Train: 0.971 | Test: 0.978
k= 5 | Train: 0.971 | Test: 0.978
k= 7 | Train: 0.971 | Test: 0.978
k= 9 | Train: 0.971 | Test: 0.978
k=15 | Train: 0.971 | Test: 0.978
k=30 | Train: 0.952 | Test: 0.956
💡 نصيحة: عندما يكون k=1، يحقق النموذج دقة 100% على مجموعة التدريب (خطر الإفراط في الضبط)؛ عندما يكون k كبيرًا جدًا، تقل الدقة (نقص في الضبط). k=3-7 هو خيار جيد - هذا مثال عملي على "المقايضة بين التحيز والتبان".

▶ مثال: تفسير تقرير التصنيف (الصعوبة: ⭐⭐)

PYTHON
# Detailed classification report
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report

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, stratify=y
)

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

print("=== Classification Report ===")
print(classification_report(y_test, y_pred, target_names=load_iris().target_names))
💻 المخرجات:

TEXT 📖 للعرض فقط
=== Classification Report ===
              precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        15
  versicolor       1.00      0.93      0.97        15
   virginica       0.94      1.00      0.97        15

    accuracy                           0.98        45
   macro avg       0.98      0.98      0.98        45
weighted avg       0.98      0.98      0.98        45

كيفية تفسير تقرير التصنيف:

المقياس المعنى التفسير
precision (الدقة) نسبة العينات التي تم التنبؤ بأنها تنتمي إلى هذه الفئة وأنها فعليًا تنتمي إليها دقة versicolor = 1.00 = جميع العينات التي تم التنبؤ بأنها versicolor صحيحة
recall (الاستدعاء) نسبة العينات الحقيقية من تلك الفئة التي تم التنبؤ بها بشكل صحيح استدعاء versicolor = 0.93 = تم تصنيف عينة versicolor واحدة بشكل خاطئ
f1-score (درجة F1) المتوسط التوافقي للدقة والاستدعاء مقياس مركب؛ كلما اقترب من 1 كان أفضل
support (الدعم) عدد العينات الحقيقية في هذه الفئة 15 عينة اختبار لكل فئة

▶ مثال: تصور حدود القرار (الصعوبة: ⭐⭐⭐)

PYTHON
# Visualize KNN decision boundaries on Iris (2 features)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier

iris = load_iris()
X = iris.data[:, :2]  # Use only first 2 features for 2D plot
y = iris.target

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X, y)

# Create mesh grid for decision boundary
h = 0.02
x_min, x_max = X[:, 0].min() - 0.5, X[:, 0].max() + 0.5
y_min, y_max = X[:, 1].min() - 0.5, X[:, 1].max() + 0.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)

# Plot
plt.figure(figsize=(8, 6))
plt.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Set1)
scatter = plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1, edgecolors='black')
plt.xlabel('Sepal length (cm)')
plt.ylabel('Sepal width (cm)')
plt.title('KNN (k=5) Decision Boundary on Iris')
plt.legend(handles=scatter.legend_elements()[0], labels=list(iris.target_names))
plt.savefig('knn_decision_boundary.png', dpi=150, bbox_inches='tight')
plt.show()
print("Decision boundary plot saved.")

المخرجات: (قم بتشغيل المثال لرؤية المخرجات الفعلية، أو راجع ملاحظة المخرجات المتوقعة في تعليقات الكود أعلاه.)

💡 نصيحة: توضح الشكل أعلاه كيف يقسم KNN ميزات الفضاء إلى ثلاث مناطق - كل منها يتوافق مع فئة مختلفة. كلما كانت الحدود أكثر سلاسة، كان النموذج أكثر "تحفظًا" (قيمة k أكبر)؛ وكلما كانت الحدود أكثر تعرجًا، كان النموذج أكثر "حساسية" (قيمة k أصغر).

▶ مثال: شامل—تدفق عمل التعلم الآلي الكامل باستخدام KNN على مجموعة بيانات آيريس (الصعوبة: ⭐⭐⭐)

PYTHON
# ============================================
# Complete ML Workflow: KNN on Iris Dataset
# Step 1-6: Full pipeline with evaluation
# ============================================

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import (accuracy_score, classification_report,
                             confusion_matrix)

# Step 1: Load data
iris = load_iris()
X, y = iris.data, iris.target
print(f"Step 1 - Data loaded: {X.shape[0]} samples, {X.shape[1]} features")
print(f"  Classes: {list(iris.target_names)}")
print(f"  Class distribution: {np.bincount(y)}")

# Step 2: Split data (70% train, 30% test)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)
print(f"\nStep 2 - Data split: Train={len(X_train)}, Test={len(X_test)}")

# Step 3: Feature scaling (important for KNN!)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
print(f"\nStep 3 - Features scaled (mean≈0, std≈1)")
print(f"  Before scaling - mean: {X_train.mean(axis=0).round(2)}")
print(f"  After scaling  - mean: {X_train_scaled.mean(axis=0).round(2)}")

# Step 4: Train model
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train_scaled, y_train)
print(f"\nStep 4 - Model trained: KNN (k=5)")

# Step 5: Evaluate
y_pred = knn.predict(X_test_scaled)
test_acc = accuracy_score(y_test, y_pred)
print(f"\nStep 5 - Evaluation:")
print(f"  Test accuracy: {test_acc:.3f}")
print(f"\n{classification_report(y_test, y_pred, target_names=iris.target_names)}")
print("Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))

# Step 6: Predict new samples
new_data = np.array([
    [5.1, 3.5, 1.4, 0.2],   # Likely setosa
    [6.7, 3.0, 5.2, 2.3],   # Likely virginica
    [5.9, 3.0, 4.2, 1.5],   # Likely versicolor
])
new_data_scaled = scaler.transform(new_data)
predictions = knn.predict(new_data_scaled)
print("\nStep 6 - New predictions:")
for i, pred in enumerate(predictions):
    print(f"  Sample {i+1} → {iris.target_names[pred]}")
💻 المخرجات:

TEXT 📖 للعرض فقط
Step 1 - Data loaded: 150 samples, 4 features
  Classes: ['setosa', 'versicolor', 'virginica']
  Class distribution: [50 50 50]

Step 2 - Data split: Train=105, Test=45

Step 3 - Features scaled (mean≈0, std≈1)
  Before scaling - mean: [5.86 3.06 3.78 1.2 ]
  After scaling  - mean: [ 0. -0.  0. -0.]

Step 4 - Model trained: KNN (k=5)

Step 5 - Evaluation:
  Test accuracy: 1.000

              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]]

Step 6 - New predictions:
  Sample 1 → setosa
  Sample 2 → virginica
  Sample 3 → versicolor
💡 نصيحة: تغيير مقياس الميزات مهم جدًا لـ KNN—فـ KNN يستخدم مقاييس المسافة (مثل المسافة الإقليدية)، وإذا كانت ميزة واحدة أكبر بعوامل من أخرى، فإنها "تهيمن" على حسابات المسافة. StandardScaler يقوم بقياس جميع الميزات بحيث يكون متوسطها 0 وانحرافها المعياري 1 لضمان أن كل ميزة تساهم بشكل متساوٍ.


❓ أسئلة شائعة

س ما الفرق بين التعلم الآلي والتعلم العميق؟
ج التعلم العميق هو فرع من التعلم الآلي. يشمل التعلم الآلي جميع طرق "التعلم من البيانات" (KNN، SVM، أشجار القرار، إلخ)، بينما يشير التعلم العميق تحديداً إلى الأساليب التي تستخدم الشبكات العصبية متعددة الطبقات. يعمل التعلم العميق بشكل أفضل على البيانات غير المهيكلة مثل الصور والكلام واللغة الطبيعية، ولكنه يتطلب المزيد من البيانات والقدرة الحسابية؛ بينما يظل التعلم الآلي التقليدي عملياً جداً للبيانات المهيكلة. العلاقة: الذكاء الاصطناعي ⊃ التعلم الآلي ⊃ التعلم العميق.
س هل يتطلب التعلم الخاضع للإشراف دائماً تسميات؟
ج نعم، يُعرَّف التعلم الخاضع للإشراف بأنه "التعلم من البيانات المُعلَّمة". بدون التسميات، يتم استخدام التعلم غير الخاضع للإشراف (مثل التجميع وتقليل الأبعاد). ومع ذلك، يمكن للـ "التعلم شبه الخاضع للإشراف" استخدام كمية صغيرة من البيانات المُعلَّمة مدمجة مع كمية كبيرة من البيانات غير المُعلَّمة - وهو أمر عملي جداً في سيناريوهات تكون فيها التكلفة العالية للتصنيف.
س ما الفرق بين التجميع والتصنيف؟
ج التصنيف هو تعلم خاضع للإشراف - حيث تكون الفئات محددة مسبقاً (قطة/كلب)، وبيانات التدريب مُعلَّمة. التجميع هو تعلم غير خاضع للإشراف - حيث يتم اكتشاف الفئات تلقائياً بواسطة الخوارزمية، وبيانات التدريب غير مُعلَّمة. يجيب التصنيف عن سؤال "ما فئة هذا؟"، بينما يجيب التجميع عن "كيف يمكن تجميع البيانات؟".
س ما هو sklearn؟
ج scikit-learn (sklearn) هو مكتبة التعلم الآلي الأكثر شعبية بلغة Python، حيث توفر مجموعة كاملة من الأدوات للتصنيف، والانحدار، والتجميع، وتقليل الأبعاد، وهندسة الميزات، واختيار النماذج، والمزيد. واجهة برمجة التطبيقات (API) الخاصة به متسقة للغاية (fit/predict/score)، مما يسهل البدء به وأداة مفضلة لتعلم التعلم الآلي. التثبيت: pip install scikit-learn.
س كم من الوقت يستغرق تدريب نموذج تعلم آلي؟
ج يعتمد ذلك على ثلاثة عوامل: كمية البيانات، وتعقيد النموذج، والعتاد. يستغرق تدريب نموذج KNN على مجموعة بيانات Iris (150 سجلاً) أقل من ثانية واحدة؛ أما تدريب غابة عشوائية على مليون سجل فقد يستغرق من بضع دقائق إلى بضع ساعات؛ ويحتاج تدريب نموذج كبير بمستوى GPT إلى آلاف وحدات GPU وياخذ عدة أسابيع. بالنسبة للمشاريع المبتدئة، عادةً يستغرق الأمر بضع ثوانٍ فقط إلى بضع دقائق.
س كيف تختار قيمة k في KNN؟
ج عادةً ما يتم استخدام التحقق المتقاطع لاختيارها. إذا كانت k صغيرة جداً (مثلاً k=1)، فمن المرجح أن يحدث التحميل الزائد (overfitting)؛ إذا كانت k كبيرة جداً (مثلاً k=50)، فمن المرجح أن يحدث التحميل الناقص (underfitting). قاعدة عامة: ابدأ بـ k=5، ثم جرب k=1, 3, 5, 7, 9, و11 لترى أيها يعمل بشكل أفضل على مجموعة التحقق. عمومًا، اختر رقماً فردياً لتجنب التعادل.

📖 ملخص


📝 تمارين

  1. المشكلة الأساسية (الصعوبة ⭐): استخدم sklearn لتدريب KNeighborsClassifier (k=5) على مجموعة بيانات Wine (load_wine())، واطبع دقة التدريب والاختبار. مجموعة بيانات Wine تحتوي على 13 سمة و3 فئات.
  2. المشكلة المتقدمة (الصعوبة ⭐⭐): قارن بين دقة KNN وأشجار القرار (DecisionTreeClassifier) على مجموعة بيانات Wine. جرب قيمًا مختلفة لـ k (1، 3، 5، 7، 9) وأعماق مختلفة للأشجار (2، 3، 5، None) لإيجاد المعلمات المثلى لكل خوارزمية.
  3. السؤال التحدي (الصعوبة ⭐⭐⭐): ارسم منحنى الدقة لقيم مختلفة لـ k—مع k (1-30) على المحور x ودقة الاختبار على المحور y—وتحلل النقطة الأعلى. تلميح: استخدم matplotlib.pyplot.plot()، ولاحظ اتجاه المنحنى، واشرح لماذا يكون k كبيرًا جدًا أو صغيرًا جدًا غير مرغوب فيه.
Web-Tutorial.com

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

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

100%