K-Nearest Neighbors (KNN)
استكشف الجيران الأقرب K (KNN). تعلّم كيفية عمل خوارزمية التعلّم الخاضع للإشراف هذه في التصنيف والانحدار، واستخدامها في البحث المرئي، ودمجها مع Ultralytics YOLO26.
تُعد خوارزمية أقرب الجيران (KNN) خوارزمية قوية وبديهية تُستخدم في مجال التعلّم الخاضع للإشراف لمهام التصنيف والانحدار على حد سواء. وبفضل بساطتها، تُصنَّف KNN غالبًا على أنها «متعلّم كسول» لأنها لا تبني نموذجًا ولا تتعلّم المعلمات أثناء مرحلة التدريب. وبدلًا من ذلك، تحفظ مجموعة بيانات التدريب بأكملها، ولا تُجري الحسابات إلا عند طلب تنبؤ. يعتمد المبدأ الأساسي للخوارزمية على تشابه السمات؛ إذ تفترض أن نقاط البيانات ذات السمات المتشابهة توجد على مقربة من بعضها بعضًا ضمن فضاء سمات متعدد الأبعاد.
كيفية عمل الخوارزمية#
تعتمد آلية أقرب الجيران على حسابات المسافة. عند إدخال نقطة استعلام جديدة، تبحث الخوارزمية في مجموعة البيانات المخزنة للعثور على عدد «K» من عينات التدريب الأقرب إلى الإدخال الجديد.
-
قياس المسافة: يحسب النظام المسافة بين نقطة الاستعلام وكل نقطة أخرى في قاعدة البيانات. والمقياس الأكثر شيوعًا هو المسافة الإقليدية، التي تقيس المسافة في خط مستقيم بين النقاط. وقد تُستخدم مقاييس أخرى مثل مسافة مانهاتن (هندسة سيارات الأجرة) أو مسافة مينكوفسكي وفقًا لنوع البيانات.
-
اختيار الجيران: بعد حساب المسافات، ترتبها الخوارزمية وتحدد أقرب «K» إدخالات.
-
اتخاذ القرار: - للتصنيف: تستخدم الخوارزمية نظام «تصويت الأغلبية». وتُسنَد إلى نقطة الاستعلام تسمية الفئة التي تظهر بأكبر تكرار بين الجيران وعددهم K. ويُستخدم ذلك على نطاق واسع في مهام تصنيف الصور الأساسية. - للانحدار: يُحسب التنبؤ من خلال متوسط قيم أقرب K من الجيران لتقدير متغير مستمر.
اختيار قيمة «K» المناسبة#
يُعد اختيار القيمة المثلى لـ «K» خطوة حاسمة في ضبط المعلمات الفائقة. ويؤثر اختيار K تأثيرًا كبيرًا في أداء النموذج وقدرته على التعميم على البيانات الجديدة.
- قيمة K منخفضة: تجعل قيمة K الصغيرة (مثلًا، K=1) النموذج شديد الحساسية للضوضاء والقيم الشاذة في البيانات، مما قد يؤدي إلى فرط التخصيص.
- قيمة K مرتفعة: تعمل قيمة K الكبيرة على تنعيم حدود القرار، مما يقلل تأثير الضوضاء، لكنها قد تطمس الأنماط المميزة، وينتج عن ذلك نقص التخصيص.
التطبيقات الواقعية#
رغم بساطتها مقارنةً بالشبكات العصبية العميقة، تظل KNN ذات صلة كبيرة بالذكاء الاصطناعي الحديث، ولا سيما عند دمجها مع تقنيات استخراج السمات المتقدمة.
- أنظمة التوصية: تيسّر KNN الترشيح التعاوني في بث الوسائط والتجارة الإلكترونية. ومن خلال تحديد المستخدمين ذوي سجلات المشاهدة أو سلوكيات الشراء المتشابهة (الجيران)، يمكن للمنصات اقتراح منتجات يُرجَّح أن يستمتع بها المستخدم استنادًا إلى تفضيلات «أقرب جيرانه».
- اكتشاف الحالات الشاذة: تُستخدم KNN في الأمن السيبراني والقطاع المالي من أجل اكتشاف الحالات الشاذة. وتُمثَّل المعاملات أو أنشطة الشبكة في فضاء سمات؛ وتُعلَّم أي نقطة بيانات جديدة تقع بعيدًا عن العناقيد الكثيفة للنشاط «الطبيعي» باعتبارها احتيالًا محتملًا أو خرقًا أمنيًا.
- البحث المرئي: تعتمد محركات البحث المتجهي الحديثة غالبًا على خوارزميات أقرب الجيران التقريبي (ANN)—وهي صيغة محسّنة من KNN—لاسترجاع الصور المتشابهة بسرعة استنادًا إلى التضمينات عالية الأبعاد التي تنشئها نماذج مثل YOLO26.
التحديات والاعتبارات#
رغم فعاليتها، تواجه KNN لعنة الأبعاد. فمع ازدياد عدد السمات (الأبعاد)، تصبح نقاط البيانات متناثرة، وتفقد مقاييس المسافة فعاليتها. وإضافةً إلى ذلك، نظرًا إلى تخزينها جميع بيانات التدريب، قد تستهلك KNN قدرًا كبيرًا من الذاكرة وتعاني من زمن استدلال مرتفع في مجموعات البيانات الكبيرة. ولمعالجة ذلك، غالبًا ما يجهّز الممارسون البيانات مسبقًا باستخدام تقنيات خفض الأبعاد مثل تحليل المكونات الرئيسية (PCA)، أو يستخدمون هياكل بيانات متخصصة مثل أشجار KD لتسريع البحث. ولتوسيع نطاق مجموعات البيانات وتدريب النماذج على مستوى المؤسسات، يمكن أن يساعد استخدام منصة Ultralytics في إدارة موارد الحوسبة اللازمة للمعالجة المسبقة للبيانات المعقدة.
التمييز بين KNN وK-Means#
من المهم التمييز بين أقرب الجيران والتجميع باستخدام K-Means، إذ غالبًا ما تتسبب أسماؤهما المتشابهة في حدوث التباس.
- إن KNN خوارزمية تعلّم خاضعة للإشراف تستخدم البيانات الموسومة لإجراء التنبؤات.
- إن K-Means خوارزمية تعلّم غير خاضع للإشراف تُستخدم لتجميع البيانات غير الموسومة في عناقيد استنادًا إلى أوجه التشابه البنيوية.
مثال على التنفيذ#
يوضح مقتطف الشيفرة التالي سير عمل بسيطًا لتصنيف KNN باستخدام مكتبة Scikit-learn الشائعة. وفي سياق الرؤية الحاسوبية، يستخرج نموذج تعلّم عميق مثل YOLO26 عادةً «السمات» المُدخلة قبل تمريرها إلى مصنّف KNN.
from sklearn.neighbors import KNeighborsClassifier
# Simulated feature vectors (e.g., extracted from YOLO26) and labels
# Features: [Size, Redness], Labels: 0=Apple, 1=Orange
features = [[0.8, 0.9], [0.9, 0.8], [0.2, 0.3], [0.3, 0.2]]
labels = [0, 0, 1, 1]
# Initialize KNN with 3 neighbors
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(features, labels)
# Predict the class of a new object [Size=0.85, Redness=0.85]
prediction = knn.predict([[0.85, 0.85]])
print(f"Predicted Class: {prediction[0]} (0=Apple, 1=Orange)")








