🔥 أحدث الأخبار

موقع يهتم بكل ماهو جديد في عالم التكنولوجيا والرياضة

🤖 كورس الذكاء الاصطناعي – الحلقة 3: K-Nearest Neighbors (KNN)

 

🤖 كورس الذكاء الاصطناعي – الحلقة 3: K-Nearest Neighbors (KNN)

#برمجة #AI


🧠 مقدمة

في الحلقة السابقة تعلمنا:

  • الانحدار الخطي Linear Regression 📈
  • كيف يتعلم AI معادلة من البيانات
  • التوقع بالأرقام

اليوم سندخل نوع مختلف تماماً من الذكاء الاصطناعي:

🧩 K-Nearest Neighbors (KNN)


📌 ما هو KNN؟

هو خوارزمية تعتمد على فكرة بسيطة جداً:

“أقرب البيانات لك هي التي تحدد نتيجتك”


🧠 مثال من الحياة

تخيل أنك تريد معرفة:

هل هذا الشخص “رياضياً” أم “غير رياضي”؟

ونظرنا حوله:

  • أقرب 3 أشخاص = رياضيين
    ➡ إذن هو غالباً رياضي

📊 فكرة KNN

بدلاً من التعلم من معادلة مثل Linear Regression

KNN يقول:

أنا لا أتعلم معادلة… أنا أبحث عن أقرب أمثلة فقط


🧮 المفهوم الأساسي: المسافة (Distance)

نحتاج نحسب المسافة بين نقطتين:

المعادلة:

distance = |x1 - x2|

(في النسخة البسيطة)


📌 مثال بيانات

شخص طول تصنيف
A 150 صغير
B 160 صغير
C 180 طويل
D 190 طويل

🧠 كيف نتوقع شخص جديد؟

لو لدينا:

170 cm

نقارن مع الجميع ونرى الأقرب.


🔥 كود KNN بسيط في C++

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> heights = {150, 160, 180, 190};
    vector<string> labels = {"Short", "Short", "Tall", "Tall"};

    int input;
    cout << "Enter height: ";
    cin >> input;

    vector<pair<int, string>> distanceData;

    for(int i = 0; i < heights.size(); i++)
    {
        int distance = abs(heights[i] - input);
        distanceData.push_back({distance, labels[i]});
    }

    sort(distanceData.begin(), distanceData.end());

    cout << "Prediction: " << distanceData[0].second << endl;

    return 0;
}

🧠 ماذا فعلنا؟

✔ حسبنا المسافة بين الإدخال وكل البيانات
✔ رتبنا الأقرب
✔ اخترنا أقرب عنصر
✔ استخدمنا تصنيفه


📊 مثال تشغيل

إدخال:

170

مقارنة:

  • 150 → بعيد
  • 160 → قريب
  • 180 → قريب
  • 190 → بعيد

➡ الأقرب = 160 أو 180


🧠 فكرة K

ما هو K؟

هو عدد الجيران الذين نأخذهم.


مثال:

K = 3

نأخذ 3 أقرب نقاط بدل واحدة.


🔥 تطوير الكود (K = 3)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> heights = {150, 160, 180, 190};
    vector<string> labels = {"Short", "Short", "Tall", "Tall"};

    int input;
    cout << "Enter height: ";
    cin >> input;

    vector<pair<int, string>> dist;

    for(int i = 0; i < heights.size(); i++)
    {
        dist.push_back({abs(heights[i] - input), labels[i]});
    }

    sort(dist.begin(), dist.end());

    int k = 3;

    int shortCount = 0, tallCount = 0;

    for(int i = 0; i < k; i++)
    {
        if(dist[i].second == "Short")
            shortCount++;
        else
            tallCount++;
    }

    if(shortCount > tallCount)
        cout << "Prediction: Short";
    else
        cout << "Prediction: Tall";

    return 0;
}

🧠 لماذا KNN مهم؟

✔ بسيط جداً
✔ لا يحتاج تدريب معقد
✔ يستخدم في التصنيف الحقيقي


📊 أين يستخدم KNN؟

  • التعرف على الصور
  • أنظمة التوصية
  • تصنيف العملاء
  • اكتشاف التشابه
  • الذكاء في الألعاب

⚖️ مقارنة سريعة

الخوارزمية النوع
Linear Regression توقع رقم
KNN تصنيف

🧠 عيوب KNN

❌ بطيء مع البيانات الكبيرة
❌ يحتاج ذاكرة كبيرة
❌ يعتمد على جودة البيانات


🧪 تمرين

  1. أضف بيانات أكثر (10 أشخاص)
  2. جرّب قيم مختلفة
  3. غيّر K إلى 5
  4. لاحظ الفرق

🚀 ملخص الحلقة 3

تعلمنا:

  • ما هو KNN
  • فكرة الجيران الأقرب
  • حساب المسافة
  • اختيار K
  • بناء نموذج تصنيف بسيط

🔥 في الحلقة 4 سنتعلم:

🧠 Neural Networks (الشبكات العصبية)

وسنبدأ بـ:

  • فكرة الخلايا العصبية
  • كيف “يفكر” الذكاء الاصطناعي
  • نموذج بسيط جداً لشبكة عصبية
  • بداية الدخول للذكاء العميق (Deep Learning) 🚀


تعليقات

💬 🙋🏻‍♂️