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 - تاریخ‌ها (Dates)

JavaScript – تاریخ‌ها (Dates)

آبجکت‌های تاریخ (Date) در جاوااسکریپت آبجکت‌های تاریخ در جاوااسکریپت به ما امکان کار با تاریخ و زمان را می‌دهند....

بیشتر بخوانید
JavaScript - آرایه‌های ثابت (Array Const)

JavaScript – آرایه‌های ثابت (Array Const)

جاوااسکریپت: تعریف آرایه با const در سال 2015، جاوااسکریپت کلمه کلیدی مهمی به نام const را معرفی کرد. این...

بیشتر بخوانید
JavaScript - تکرار آرایه‌ها (Array Iteration)

JavaScript – تکرار آرایه‌ها (Array Iteration)

جاوا اسکریپت: تکرار بر روی آرایه‌ها جاوا اسکریپت روش‌های مختلفی برای تکرار (Iteration) بر روی آرایه‌ها ارائه می‌دهد که...

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

نظرات

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

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