استكشف K-Nearest Neighbors (KNN). تعرف على كيفية عمل خوارزمية التعلم الخاضع للإشراف هذه في التصنيف والانحدار، واستخدامها في البحث المرئي، وتكاملها مع Ultralytics .
K-Nearest Neighbors (KNN) هي خوارزمية قوية وبديهية تستخدم في مجال التعلم الخاضع للإشراف لكل من مهام التصنيف و الانحدار. تتميز KNN ببساطتها، وغالبًا ما تصنف على أنها "متعلمة كسولة" لأنها لا تبني نموذجًا أو تتعلم معلمات خلال مرحلة التدريب. بدلاً من ذلك، تحفظ مجموعة بيانات التدريب بأكملها وتقوم بإجراء الحسابات فقط عند طلب التنبؤ. يعتمد المبدأ الأساسي للخوارزمية على تشابه الميزات: فهي تفترض أن النقاط ذات السمات المتشابهة موجودة على مقربة من بعضها البعض داخل مساحة ميزات متعددة الأبعاد.
تعتمد آلية K-Nearest Neighbors على حسابات المسافة. عند إدخال نقطة استعلام جديدة، تبحث الخوارزمية في مجموعة البيانات المخزنة للعثور على عدد "K" من عينات التدريب الأقرب إلى الإدخال الجديد.
يعد اختيار القيمة المثلى لـ "K" خطوة حاسمة في ضبط المعلمات الفائقة. يؤثر اختيار K بشكل كبير على أداء النموذج وقدرته على التعميم على البيانات الجديدة.
على الرغم من بساطته مقارنة بالشبكات العصبية العميقة، لا يزال KNN وثيق الصلة بالذكاء الاصطناعي الحديث، لا سيما عند الجمع بينه وبين تقنيات استخراج الميزات المتقدمة.
على الرغم من فعالية KNN، إلا أنه يواجه لعنة الأبعاد. مع زيادة عدد الميزات (الأبعاد)، تصبح نقاط البيانات متفرقة، وتفقد مقاييس المسافة فعاليتها. بالإضافة إلى ذلك، نظرًا لأنه يخزن جميع بيانات التدريب، يمكن أن يكون KNN كثيفًا في استخدام الذاكرة ويعاني من تأخر كبير في الاستدلال على مجموعات البيانات الكبيرة. لمعالجة هذا الأمر، غالبًا ما يقوم الممارسون بمعالجة البيانات مسبقًا باستخدام تقنيات تقليل الأبعاد مثل تحليل المكونات الرئيسية (PCA) أو استخدام هياكل بيانات متخصصة مثل KD-Trees لتسريع البحث. لتوسيع نطاق مجموعات البيانات وتدريب النماذج على مستوى المؤسسات، يمكن أن يساعد استخدام Ultralytics في إدارة موارد الحوسبة المطلوبة لمعالجة البيانات المعقدة مسبقًا.
من المهم التمييز بين K-Nearest Neighbors و K-Means clustering، لأن أسمائهما المتشابهة غالبًا ما تسبب الالتباس.
يوضح مقتطف الشفرة التالي سير عمل تصنيف 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)")