KNN (K-nearest neighbors)
الگوریتم KNN برای طبقه بندی و رگرسیون ساده است. «همسایه های نزدیک» یعنی نقاط شبیه به هم. هرچه همسایه ها چه بگویند، همان رأی برنده می شود. این روش در پرکردن مقادیر گمشده هم کاربرد دارد.
KNN چطور کار می کند؟
«K» تعداد همسایه های نزدیک است. برای طبقه بندی، رأی اکثریت تعیین کننده کلاس می شود. مقادیر بزرگ تر K معمولاً از نقاط دورافتاده کمتر تأثیر می گیرند و مرز پایدارتر می سازند.
- یک K انتخاب کن.
- نزدیک ترین K نقطه را پیدا کن.
- با رأی گیری، کلاس را تعیین کن.
Example
نقاط داده را ببین:
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()
حالا K=1 را آموزش می دهیم:
from sklearn.neighbors import KNeighborsClassifier
data = list(zip(x, y))
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(data, classes)
Example
یک نقطه جدید را طبقه بندی کن:
new_x = 8
new_y = 21
new_point = [(new_x, new_y)]
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()
حالا K را بزرگ تر کن و نتیجه را ببین:
Example
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()
نکته: برای درک بهتر عملکرد مدل، نتیجه را با منحنی AUC-ROC هم بررسی کن. همچنین صفحه الگوریتم KNN را نشان دار کن تا دسترسی سریع داشته باشی.
جمع بندی سریع
- K تعداد همسایه های رأی دهنده است.
- K بزرگ تر مرز پایدارتر می دهد.
- K خیلی کوچک به نویز حساس است.
- نتیجه را روی نقطه جدید رسم کن.