knn به معنای K-nearest neighbors است.
- نوعی از supervised است.
- can be used for classification or regression tasks
- ایده اصلی این روش به شرح زیر است:
- مشاهداتی که نزدیک ترین فاصله را به یک داده نوعی دارند بعنوان the most similar شناخته میشوند و بر این اساس میتوان دسته بندی را انجام داد.
- انتخاب مقدار k در الگوریتم به معنای انتخاب تعداد همسایگی در نظر گرفته شده برای یک نقطع نوعی برای تعیین مشابهت می باشد.
ابتدا کتابخانه های مورد نیاز را فراخوانی میکنیم:
import matplotlib.pyplot as plt
x = [4, 5, 10, 4, 3, 11, 14 , 8, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
classes = [0, 0, 1, 0, 0, 1, 1, 0, 1, 1]
plt.scatter(x, y, c=classes)
plt.show()
و خروجی زیر را مشاهده میکنیم:

کتابخانه knn را فراخوانی میکنیم:
from sklearn.neighbors import KNeighborsClassifier
data = list(zip(x, y))
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(data, classes)
در خط دوم مختصات ها را لیست کرده ایم و در خط بعدی از knn خواسته ایم که داده ها را با k=1 دسته بندی کند. یعنی برای هر نونه تنها به یک مورد از نزدیک ترین موارد به آن نگاه کند. در خط آخر گفته ایم که روی دیتای ما fit شود.
نکته:
- تعداد class در این مسئله دو مورد است. 0 و یک . بنابراین این مسئله به روش رگرسیون لاجستیک نیز قابل حل است.
در کد زیر یک نمونه جدید داریم و از knn میخواهیم که با شرط k=1 این نمونه را در دسته مناسب قرار دهد:
new_x = 8
new_y = 21
new_point = [(new_x, new_y)]
در نتیجه کد زیر مشاهده میشود که این نمونه در دسته 0 قرار گرفته است:
prediction = knn.predict(new_point)
prediction
که کد زیر این موضوع را به صورت مصور نشان میدهد:
plt.scatter(x + [new_x], y + [new_y], c=classes + [prediction[0]])
plt.text(x=new_x-1.7, y=new_y-0.7, s=f"new point, class: {prediction[0]}")
plt.show()
نتیجه:

حال مقدار k را به 5 تغییر میدهیم و میبینیم که نمونه داده شده در دسته 1 قرار میگیرد:
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(data, classes)
prediction = knn.predict(new_point)
plt.scatter(x + [new_x], y + [new_y], c=classes + [prediction[0]])
plt.text(x=new_x-1.7, y=new_y-0.7, s=f"new point, class: {prediction[0]}")
plt.show()
نتیجه:
