🤖 كورس الذكاء الاصطناعي – الحلقة 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
❌ بطيء مع البيانات الكبيرة
❌ يحتاج ذاكرة كبيرة
❌ يعتمد على جودة البيانات
🧪 تمرين
- أضف بيانات أكثر (10 أشخاص)
- جرّب قيم مختلفة
- غيّر K إلى 5
- لاحظ الفرق
🚀 ملخص الحلقة 3
تعلمنا:
- ما هو KNN
- فكرة الجيران الأقرب
- حساب المسافة
- اختيار K
- بناء نموذج تصنيف بسيط
🔥 في الحلقة 4 سنتعلم:
🧠 Neural Networks (الشبكات العصبية)
وسنبدأ بـ:
- فكرة الخلايا العصبية
- كيف “يفكر” الذكاء الاصطناعي
- نموذج بسيط جداً لشبكة عصبية
- بداية الدخول للذكاء العميق (Deep Learning) 🚀

تعليقات
إرسال تعليق