Python – نزدیکترین همسایهها (K-nearest neighbors)
آخرین بروزرسانی:
K-Nearest Neighbors (KNN)
K-Nearest Neighbors (KNN) یک الگوریتم ساده و کاربردی برای مسائل طبقهبندی و رگرسیون است. همچنین، به طور مکرر برای پر کردن مقادیر گمشده نیز استفاده میشود. این الگوریتم بر اساس این اصل استوار است که نقاط دادهای که نزدیکترین به یک نقطه داده جدید هستند، مشابهترین نقاط به آن داده هستند و میتوانند برای پیشبینی کلاس یا مقدار آن نقطه استفاده شوند.
نحوه عملکرد KNN:
- K تعداد نزدیکترین همسایگانی است که برای تصمیمگیری استفاده میشود.
- در مسائل طبقهبندی، اکثریت آرا برای تعیین کلاس جدید استفاده میشود.
- مقدار بزرگتر 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.xlabel('X')
plt.ylabel('Y')
plt.show()
نتیجه: این نمودار نقاط دادهای را با رنگهایی که نشاندهنده کلاسهای آنها هستند، نمایش میدهد.
-
اجرای KNN با K=1:
from sklearn.neighbors import KNeighborsClassifier
data = list(zip(x, y))
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(data, classes)
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.xlabel('X')
plt.ylabel('Y')
plt.show()
نتیجه: این کد نقطه جدید را با کلاس پیشبینی شده به نمایش میگذارد.
-
اجرای KNN با K=5:
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.xlabel('X')
plt.ylabel('Y')
plt.show()
نتیجه: تغییر مقدار K به 5 باعث تغییر در پیشبینی کلاس نقطه جدید میشود. در اینجا، تصمیمگیری بر اساس اکثریت آرا از 5 همسایه نزدیک گرفته میشود.
توضیحات بیشتر:
- ایجاد دادهها و آمادهسازی:
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]
data = list(zip(x, y))
آموزش مدل KNN:
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(data, classes)
- پیشبینی با مدل:
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.xlabel('X')
plt.ylabel('Y')
plt.show()
نتیجهگیری:
- انتخاب مقدار مناسب برای K بسیار مهم است. مقادیر کوچک K ممکن است باعث حساسیت به نویز و نقاط غیرعادی شوند، در حالی که مقادیر بزرگتر K میتوانند مدل را نسبت به نویز مقاومتر کنند و مرزهای تصمیمگیری بهتری تولید کنند.
- برای مدلهای با K بزرگ، دقت پیشبینی میتواند تحت تأثیر قرار گیرد زیرا نقطه جدید تحت تأثیر بسیاری از نقاط داده قرار میگیرد.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام