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

پست های مرتبط

مطالعه این پست ها رو از دست ندین!
Python - محدود کردن داده (MongoDB Limit)

Python – محدود کردن داده (MongoDB Limit)

Python MongoDB محدود کردن نتایج برای محدود کردن نتایج در MongoDB، از متد limit() استفاده می‌کنیم. متد limit() یک...

بیشتر بخوانید
Python - بروزرسانی (MongoDB Update)

Python – بروزرسانی (MongoDB Update)

به‌روزرسانی یک رکورد برای به‌روزرسانی یک رکورد یا سند در MongoDB، از متد update_one() استفاده می‌کنیم. پارامتر اول متد...

بیشتر بخوانید
Python - حذف کالکشن (MongoDB Drop Collection)

Python – حذف کالکشن (MongoDB Drop Collection)

حذف کالکشن شما می‌توانید یک جدول یا کالکشن در MongoDB را با استفاده از متد drop() حذف کنید. مثالحذف...

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

نظرات

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

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