الگوریتم Knn در پایتون

امروزه کمتر کسی را خواهید یافت که نام زبان برنامه نویسی پایتون را نشنیده باشد. زبان برنامه نویسی پایتون جزو زبان های بسیار پر کاربرد و مطرح در زمینه های مختلف به شمار می رود. این زبان در حال حاضر در زمینه های هوش مصنوعی، داده کاوی، یادگیری ماشین و همچنین محاسبات پیچیده به قدری پیشرفت کرده که بسیاری از زبان های برنامه نویسی را که برخی از آن ها قدیمی تر از این زبان نیز هستند از دور رقابت خارج کرده است.

در این مقاله می خواهیم درباره الگوریتم Knn در python که به آن الگوریتم K نزدیکترین همسایه نیز گفته می شود صحبت کنیم و به طور کامل با این الگوریتم آشنا شویم. برای شروع کار و استفاده از الگوریتم Knn در پایتون ابتدا باید با خود الگوریتم K نزدیکترین همسایه آشنا شده و بدانیم این الگوریتم در چه مواردی استفاده شده و اصولاً چه کاربردی برای ما دارد.

آشنایی با الگوریتم Knn

الگوریتم Knn در حقیقت به معنی الگوریتم یافتن نزدیکترین همسایه است. Knn مخفف K nearest neighbor بوده و بیشترین استفاده از این الگوریتم در یادگیری ماشین ( machine learning ) و همچنین داده کاوی می باشد. این الگوریتم یک الگوریتم ناپارامتری بوده که همین امر سبب می شود به نسبت الگوریتم های دیگر سادگی بیشتری داشته و استفاده بیشتری نیز داشته باشد. در اینجا نگاهی به مقایسه این الگوریتم با دیگر الگوریتم های مشابه می اندازیم.

نحوه کار الگوریتم K نزدیکترین همسایه

این الگوریتم در حقیقت k را در کلاس خود بر اساس نزدیکترین همسایه ها دسته بندی می کند. برای اینکه این الگوریتم و نحوه کار آن را به طور کامل یاد بگیریم بهتر است با مثالی مراحل انجام کار توسط این الگوریتم را باهم ببینیم.

شکل بالا یکی از ساده ترین مثال ها درباره الگوریتم K نزدیکترین همسایه است که به سادگی مارا در فهم بهتر این مطلب یاری می کند. همانطور که در شکل بالا مشاهده می کنید ستاره های قرمز و مثلث های سبز هرکدام کلاس جدا گانه ای را تشکیل داده اند و همچنین به دلیل داشتن فاصله مناسب کلاس مثلث های سبز با کلاس ستاره های قرمز به راحتی می توان این دو کلاس را تفکیک کرد. حال فرض می کنیم که نمونه مورد آزمایش ما مربع با علامت سوال باشد. دایره هایی که به دور مربع مورد انتظار ما کشیده شده در حقیقت میزان عدد K ما هستند که مارا در انجام این آزمایش کمک کرده و جزء اصلی این الگوریتم می باشند. حال اگر K ما در الگوریتم Knn عدد ۳ باشد که در شکل، دایره داخلی نشان گر این عدد است. ما دو مثلث سبز و همچنین یک ستاره قرمز در درون k انتخابی خود داریم. در این صورت و با انتخاب عدد ۳ برای K ، نمونه آزمایشی ما جزء کلاس مثلث سبز قرار دارد. حال اگر بخواهیم مقداری تغییر ایجاد کنیم و k را در الگوریتم K نزدیکترین همسایه به عدد ۷ برسانیم، در شکل نهایی خود به دایره دوم درون تصویر میرسیم. همانطور که در دایره K = 7 تصویر بالا می بینید. سه عدد مثلث سبز و ۴ عدد ستاره قرمز در درون حوزه انتخابی ما قرار گرفته اند و همین امر سبب می شود که اینبار نمونه انتخابی ما جزء کلاس ستاره های قرمز که همان کلاس A باشد قرار گیرد. انجام این الگوریتم در مثال های واقعی بسیار پیچیده تر از شکل بالا بوده و با استفاده از توانایی های زبان برنامه نویسی پایتون می توان این الگوریتم را پیاده سازی کرد. در شکل پایین نحوه عملکرد این الگوریتم به شکل فلوچارت آمده است که به درک بهتر موضوع به شما کمک خواهد کرد.

الگوریتم KNN در پایتون

چگونگی اجرای الگوریتم K نزدیکترین همسایه با پایتون

در این مرحله می خواهیم به اجرای این الگوریتم بپردازیم و شروع به نوشتن کد های الگوریتم KNN برای پایتون کنیم که بتوانیم با زبان برنامه نویسی پایتون این الگوریتم بسیار کارامد و پر استفاده را به شکل مناسب و قابل اسفاده بنویسیم. ما برای مثال خود از مجموع داده ( dataset ) معروف Iris استفاده می کنیم. برای اینکار در ابتدا باید کتابخانه ها را وارد کنیم.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

پس از انجام مرحله بالا باید مجموعه داده Iris را از این لینک وارد می کنیم

# Assign colum names to the dataset
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']

# Read dataset to pandas dataframe
dataset = pd.read_csv(url, names=names)

 

 

بعداز وارد کردن مجموعه داده اگر خواستیم این مجموعه را ببینیم میتوانیم از دستور ()dataset.head  استفاده کنیم. در صورت استفاده از این کد در ۵ خط اول باید جدولی مطابق جدول فوق را ببینیم.

* X در این مرحله شامل چهار ستون ویژگی ها بوده درحالی که y شامل ستون برچسب ها می شود.
پس از انجام مراحل بالا حالا باید مجموعه داده خود را به دو بخش train و test تقسیم کنیم. دلیل این تقسیم بندی در حقیقت دیدن نحوه انجام کار الگوریتم ما قبل از انجام مرحله تست است.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)

قبل از انجام هرگونه پیشبینی قطعی بهتر است که ویژگی ها را مقیاس بندی کنیم تا همه آنها بتوانند به طور یکنواخت ارزیابی شوند. الگوریتم زیر مقیاس بندی ویژگی ها را برای شما انجام می دهد.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)

X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)

آموزش به الگوریتم Knn و همچنین پیشبینی با آن کار سختی نیست و به خصوص وقتی از Scikit-Learn استفاده می کنیم و با کد زیر به سادگی انجام پذیر است.

from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=5)
classifier.fit(X_train, y_train)

مرحله آخر در استفاده از الگوریتم knn ، پیشبینی داده های تست ما است که به سادگی با کد زیر انجام می شود.

y_pred = classifier.predict(X_test)

در پایان هر الگوریتمی نیاز است تا به طور کامل ارزیابی را از عملکرد الگوریتم داشته باشیم. برای انجام این کار می توانیم کد زیر را استفاده کرده که به طور کاملی نتیجه را برای ما نشان خواهد داد.

from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

پس از وارد کردن این کد باید خروجی به شکل زیر باشد.

[[۱۱  ۰  ۰]
   ۰ ۱۳  ۰]
   ۰  ۱  ۶]]
                 precision   recall   f1-score   support

    Iris-setosa       1.00     1.00       1.00        11
Iris-versicolor       1.00     1.00       1.00        13
 Iris-virginica       1.00     1.00       1.00         6

    avg / total       1.00     1.00       1.00        30

این نتیجه نشتن دهنده این است که الگوریتم Knn ما توانایی انجام کار را برای همه ی ۳۰ رکورد موجود در تست داشته و به موفقیتی ۱۰۰% دست یافته است. این نکته را باید درنظر داشت که این الگوریتم با این مجموعه داده ها بسیار عالی عمل می کند و با هر مجموعه ای از داده ها این بهره وری را ندارد. با استفاده از کد های بالا به سادگی می توانید این الگوریتم را بر روی مجموع داده های Iris اجرا کرده و نتیجه انجام کار خود را مشاهده نمایید.
الگوریتم KNN در پایتون
در پایان باید گفت که الگوریتم K نزدیکترین همسایه یکی از الگوریتم های پرطرفدار پایتون بوده و استفاده از این الگوریتم کمک به حل بسیاری از مشکلات در زمینه داده کاوی می کند. این الگوریتم جزء الگوریتم های بسیار ساده و در عین حال مهم و پر کاربرد می باشد که در این آموزش به طور کامل انجام آن را با زبان برنامه نویسی پایتون دیدیم.