Professional Documents
Culture Documents
KNN
KNN
مقدمة
• في إطا ير تطوي ير فهمنيا لتقنيات التعلم اآلل ،نتوجه اليوم نح يو
استكشاف إحدى الخوارزميات األساسية والقوية في تعلم االلة
الجيان (k-
ر ال وهي خوارزمية k-أقرب ر
لإلشاف ،أ ي الخاضع
ً
اختصارا )k-NN). )Nearest Neighbors
• يجب أن تكون المتغيرات مسواة ،وإال فإن متغيرات النطاق األعلى يمكن أن تتحيز لفئة معينة
• يحبذ معالجة البيانات قبل تطبيق الخوارزمية عليها مثل إزالة القيم المتطرفة.
مزايا وعيوب KNN
مزايا KNN
• تعتبر خوارزمية الجار األقرب سهلة التنفيذ للغاية حيث أن الشيء الوحيد الذي يجب حسابه هو فقط
المسافة بين النقاط المختلفة على أساس بيانات الميزات المختلفة ويمكن بسهولة حساب هذه المسافة
باستخدام دالة المسافة سواء اإلقليدية Euclideanأو مانهاتن .Manhattan
نظرا لعدم وجود عملية تدريب للبيانات يمكن إضافة بيانات جديدة في أي وقت ألنها لن تؤثر على
ً •
أداء النموذج.
• متعدد االستخدامات -مفيد في التصنيف واالنحدار
مزايا وعيوب KNN
❖ عيوب KNN
• ال تعمل بشكل جيد مع مجموعة البيانات الكبيرة ألن حساب المسافات بين كل عينة للبيانات سيكون
مكلفًا للغاية.
• ال تعمل بشكل جيد مع البيانات ذات األبعاد المتعددة ألن هذا سيعقد عملية حساب المسافة لكل بُعد.
• حساسة جدا للبيانات المتطرفة أو المفقودة.
• تحتاج إلى تخزين جميع بيانات التدريب ،وبالتالي يتطلب ذاكرة عالية.
خطوات تنفيذ خوارزمية KNN
.1نحدد قيمة المتغير kالذى يعبر عن عدد المجاورين
.2نحسب قيمة المسافة بين المثال الجديد واالمثلة التي في dataset
.3نرتب االمثلة لنحصل على المجاورين اعتمادا على أقل مسافة تم حسابها في الخطوة السابقة ونأخذ منهم عدد kمجاور
.4نحدد الكالس للمجاورين
.5الكالس االكثر اغلبية للمجاورين هو الكالس المتوقع لهذا المثال
.6أي الخوارزمية باختصار “”Tell me who your neighbors are, and I’ll tell you who you are
Distance measures
• سنستخدم المسافة إليجاد أقرب الجيران ألي نقطة ،Xqولكن ال زلنا ال نعرف كيف يتم قياس المسافة بين Xq
والنقاط األقرب األخرى بطريقة رياضية؟ ال يمكننا استنتاج ما إذا كانت هذه النقطة هي األقرب أم ال دون إيجاد
المسافة أوالا.
• هناك عدة أنواع من تقنيات قياس المسافة :
d(p,q)=|x1-x2| + |y1-y2|
d(p,q)=max(|x1-x2 | , |y1-y2|)
مثال بسيط لتوضيح طريقة عمل الخوارزمية:
• نفترض ان لدينا مصنع يقوم بصنع االقالم وقمنا بعمل استطالع عن جودتهم من خالل السؤال عن بعض
الخصائص ) )attributesفي االقالم وليكن منهم نوع الحبر ولنعبر عنة بالمتغير ,X1وقابليته للمسح ونعبر
عنة بالمتغير X2فتجمع لدينا هذه المعلومات
X1=3 , X2=7
مثال بسيط لتوضيح طريقة عمل الخوارزمية:
.3نرتب االمثلة لنحصل على المجاورين اعتمادا على أقل مسافة تم حسابها في الخطوة السابقة ونأخذ منهم عدد k
مجاور وحيث kهنا قيمة 3مجاورين فقط وبترتيب االمثلة حسب المسافة االقل سوف نلغى المثال الثاني من ان
يكون من المجاورين
مثال بسيط لتوضيح طريقة عمل الخوارزمية:
.4نحدد قيمة التصنيف للمجاورين كما في العمود االخير في الجدول التالي
.5الكالس االكثر اغلبية للمجاورين هو GOODحيث لدينا ثالثة أمثلة اثنين منهم GOODوواحد فقط BADلذا
الكالس المتوقع لهذا القلم الجديد هو GOOD
بناء الخوارزمية في بايثون
import numpy as np
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def euclidean_distance(self, x1, x2):
return np.sqrt(np.sum((x1 - x2) ** 2))
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
distances = [self.euclidean_distance(x, x_train) for x_train in
self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
most_common = np.bincount(k_nearest_labels)
return most_common
بناء الخوارزمية في بايثون
# example usage
X_train = np.array([[1, 2], [2, 4], [4, 6], [5, 7]])
y_train = np.array([0, 1, 1, 1])
X_test = np.array([[3, 5], [5, 8]])
knn = KNN(3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(y_pred)
وظيفة ()1
1