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 بزرگ، دقت پیش‌بینی می‌تواند تحت تأثیر قرار گیرد زیرا نقطه جدید تحت تأثیر بسیاری از نقاط داده قرار می‌گیرد.

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
JavaScript - رویدادها (Events)

JavaScript – رویدادها (Events)

رویدادهای HTML رویدادها در HTML، “اتفاقاتی” هستند که برای عناصر HTML رخ می‌دهند. این اتفاقات می‌توانند ناشی از کار...

بیشتر بخوانید
JavaScript - سازنده‌های شیء (Object Constructors)

JavaScript – سازنده‌های شیء (Object Constructors)

ساخت آبجکت با تابع سازنده (Object Constructor Function) برای ساخت چندین آبجکت مشابه، از تابع سازنده استفاده می‌شود. این...

بیشتر بخوانید
JavaScript - نمایش شیء (Object Display)

JavaScript – نمایش شیء (Object Display)

نحوه نمایش آبجکت‌ها در جاوااسکریپت هنگام نمایش یک آبجکت جاوااسکریپت به صورت مستقیم، خروجی معمولاً به شکل [object Object]...

بیشتر بخوانید

نظرات

سوالات و نظراتتون رو با ما به اشتراک بذارید

برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید.