Download as pdf or txt
Download as pdf or txt
You are on page 1of 22

‫المعالجة المسبقة للبيانات‬

‫مقدمة‬
‫• في إطا ير تطوي ير فهمنيا لتقنيات التعلم اآلل‪ ،‬نتوجه اليوم نح يو‬
‫استكشاف إحدى الخوارزميات األساسية والقوية في تعلم االلة‬
‫الجيان (‪k-‬‬
‫ر‬ ‫ال وهي خوارزمية ‪k-‬أقرب‬ ‫ر‬
‫لإلشاف‪ ،‬أ ي‬ ‫الخاضع‬
‫ً‬
‫اختصارا ‪)k-NN).‬‬ ‫‪)Nearest Neighbors‬‬

‫• خوارزمية ي‪ KNN‬يمن يالخوارزميات يالتي يتستخدم يفي يمهامي‬


‫التصنيفي يويالتنبؤ‪.‬‬

‫• الفكرة ياألساسية يوراء يخوارزمية ي ‪ kNN‬ي‬


‫ه يتحدي يد يالصنفي‬
‫أ يو يقيمة يعينة يجديدة يبناءي يعىل يموقعهيا يمن يأقرب يعيناتي‬
‫منيمجموعةيبياناتيالتدريب‪.‬‬
‫كيف تعمل خوارزمية ‪KNN‬‬
‫يعتمد مبدأ عمل هذه الخوارزمية على حساب المسافة االقليدية‬
‫بين النقاط ‪ ،‬حيث كلما قلت المسافة بين نقطتين زادت احتمالية‬
‫انتماء النقطتين بعضهما لبعض و من هنا جاء اسم الخوارزمية ‪،‬‬
‫و يشير الحرف ‪k‬إلى عدد العينات التي سيتم تصنيف نقطة ما‬
‫بناء على المسافات بينها و بين جيرانها الذين يبلغ عددهم ‪k.‬‬
‫يعني إذا افترضنا أن ‪k = 3‬فإن الخوارزمية تقيس المسافة بين‬
‫النقطة المستهدفة و أقرب ثالث نقاط إليها فإذا كانت أقرب‬
‫نقطتين تنتمي للمجموعة أ والنقطة الثالثة لوحدها تنتمي‬
‫للمجموعة ب فإن النقطة المستهدفة سيتم تصنيفها على أساس‬
‫أنها تنتمي للمجموعة أ‪.‬‬
‫األشياء التي يجب مراعاتها قبل اختيار خوارزمية ‪KNN‬‬

‫• تعتبر هذه الخوارزمية مكلفة حسابيا‬

‫• يجب أن تكون المتغيرات مسواة ‪ ،‬وإال فإن متغيرات النطاق األعلى يمكن أن تتحيز لفئة معينة‬

‫• يحبذ معالجة البيانات قبل تطبيق الخوارزمية عليها مثل إزالة القيم المتطرفة‪.‬‬
‫مزايا وعيوب ‪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‬‬
‫والنقاط األقرب األخرى بطريقة رياضية؟ ال يمكننا استنتاج ما إذا كانت هذه النقطة هي األقرب أم ال دون إيجاد‬
‫المسافة أوالا‪.‬‬
‫• هناك عدة أنواع من تقنيات قياس المسافة ‪:‬‬

‫‪1. Euclidean distance‬‬

‫‪2. Manhattan distance‬‬

‫‪3. Minkowski distance‬‬


‫‪The distance function D has following properties or metric‬‬
‫‪if:‬‬
‫‪Non-negativity.1‬‬
‫‪ .1‬المسافة بين أي نقطتين يجب أن تكون دائ اما موجبة أو تساوي صفر‪ .‬بمعنى آخر‪ ،‬ال يمكن أن تكون المسافة سلبية‪.‬‬
‫‪d(x,y)≥0.2‬‬
‫‪Identity of indiscernibles.2‬‬
‫‪ .1‬المسافة بين نقطتين تكون صفر إذا وفقط إذا كانت النقطتان متطابقتين‪ .‬هذا يعني أنه إذا كانت المسافة بين ‪x‬و ‪y‬‬
‫تساوي صفر‪ ،‬فإن ‪x‬و ‪y‬يجب أن يكونا متطابقين‪.‬‬
‫‪d(x,y)=0⇔x=y .2‬‬
‫‪Symmetry.3‬‬
‫‪ .1‬المسافة بين النقطتين ‪x‬و ‪y‬هي نفسها المسافة بين ‪y‬و ‪x.‬المسافة ال تعتمد على اتجاه القياس‪.‬‬
‫‪d(x,y)=d(y,x) .2‬‬
‫‪Triangle inequality.4‬‬
‫‪.1‬المسافة بين نقطتين ال يمكن أن تكون أكبر من مجموع المسافات عبر نقطة ثالثة‪ .‬بعبارة أخرى‪ ،‬الطريق المباشر‬
‫بين نقطتين هو دائ اما األقصر‪.‬‬
‫‪d(x,z)≤d(x,y)+d(y,z).2‬‬
Euclidean Distance
Euclidean Distance
Minkowski Distance
Minkowski Distance: Examples
d(p,q) = ((x1-x2)2 + (y1-y2)2)1/2

d(p,q)=|x1-x2| + |y1-y2|

d(p,q)=max(|x1-x2 | , |y1-y2|)
‫مثال بسيط لتوضيح طريقة عمل الخوارزمية‪:‬‬
‫• نفترض ان لدينا مصنع يقوم بصنع االقالم وقمنا بعمل استطالع عن جودتهم من خالل السؤال عن بعض‬
‫الخصائص )‪ )attributes‬في االقالم وليكن منهم نوع الحبر ولنعبر عنة بالمتغير ‪ ,X1‬وقابليته للمسح ونعبر‬
‫عنة بالمتغير ‪ X2‬فتجمع لدينا هذه المعلومات‬

‫نوع الحبر ‪x1‬‬ ‫قابليتة للمسح ‪x2‬‬ ‫التصنيف ‪Classification Y‬‬


‫‪7‬‬ ‫‪7‬‬ ‫‪BAD‬‬
‫‪7‬‬ ‫‪4‬‬ ‫‪BAD‬‬
‫‪3‬‬ ‫‪4‬‬ ‫‪GOOD‬‬
‫‪1‬‬ ‫‪4‬‬ ‫‪GOOD‬‬
‫مثال بسيط لتوضيح طريقة عمل الخوارزمية‪:‬‬
‫• االن لدينا منتج جديد في المصنع لقلم جديد وله خاصيتين ‪X1=3 , X2=7‬هل يمكننا التنبؤ بتصنيف هذا القلم؟‬
‫لنتبع خطوات الخوارزمية‪:‬‬
‫‪ .1‬نحدد قيمة للمتغير الذى سوف يعبر عن عدد المجاورين ‪k‬وليكن قيمة ‪k=3‬‬
‫‪ .2‬نحسب قيمة المسافة بين المنتج الجديد واالمثلة التي في ‪ dataset‬فى مثالنا هذا سوف نعتمد على ‪Euclidean‬‬
‫‪Distance‬حيث يتم حساب المسافة بين نقطتين ‪p,q‬من المعادلة‪:‬‬
‫مثال بسيط لتوضيح طريقة عمل الخوارزمية‪:‬‬

‫‪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‬‬

You might also like