بازگشت به دوره

آموزش رایگان صفر تا صد یادگیری ماشین (Machine Learning) به زبان ساده

0% تکمیل‌شده
0/0 مرحله

مقدمه‌ای بر KNN

الگوریتم K-nearest neighbors (KNN) یکی از ساده‌ترین و قدرتمندترین الگوریتم‌های یادگیری ماشین است که برای طبقه‌بندی (Classification) و رگرسیون (Regression) استفاده می‌شود.

ویژگی اصلی KNN: این الگوریتم بر اساس شباهت داده‌های جدید به داده‌های قبلی، پیش‌بینی انجام می‌دهد. به عبارت ساده، هر داده جدید را به نزدیک‌ترین گروه از داده‌های قبلی اختصاص می‌دهد.

مثال روزمره: فرض کنید به شهری جدید نقل مکان کرده‌اید و می‌خواهید یک رستوران خوب پیدا کنید. شما به چند نفر از محلی‌ها (همسایگان) می‌گویید:

“بهترین رستورانی که می‌شناسید کدام است؟”
اگر ۵ نفر از ۷ نفر یک رستوران خاص را پیشنهاد دهند، احتمالاً همان رستوران انتخاب خوبی است!

💡 در KNN، “K” نشان‌دهنده تعداد همسایگانی است که در تصمیم‌گیری شرکت می‌کنند. هرچه K بزرگ‌تر باشد، تصمیم‌گیری پایدارتر، اما ممکن است جزئیات محلی از بین برود.

دKNN چگونه کار می‌کند؟ 🔄

مراحل اجرای KNN به سادگی عبارتند از:

1️⃣ مشخص کردن مقدار K: تعیین می‌کنیم چند همسایه (نقاط داده‌ای) برای تصمیم‌گیری بررسی شوند.

2️⃣ محاسبه فاصله: فاصله نقطه جدید تا تمام نقاط داده‌ای موجود را اندازه‌گیری می‌کنیم (معمولاً از فاصله اقلیدسی استفاده می‌شود).

3️⃣ انتخاب نزدیک‌ترین K همسایه: نزدیک‌ترین نقاط به داده جدید را انتخاب می‌کنیم.

4️⃣ رای‌گیری برای طبقه‌بندی یا میانگین‌گیری برای رگرسیون:

  • در طبقه‌بندی: بر اساس بیشترین تعداد رای (دسته‌ای که بیشترین همسایه در آن قرار دارد) داده جدید را برچسب‌گذاری می‌کنیم.
  • در رگرسیون: مقدار میانگین همسایگان را به عنوان مقدار پیش‌بینی‌شده برمی‌داریم.

مثال تصویری KNN 📊

فرض کنید مجموعه‌ای از نقاط داده‌ای داریم که دو دسته آبی و قرمز هستند.

🔵 نقاط آبی → کلاس 1
🔴 نقاط قرمز → کلاس 2

حالا یک نقطه جدید (ستاره سبز) داریم. برای طبقه‌بندی آن:

اگر K = 3 باشد: سه نزدیک‌ترین همسایه را بررسی می‌کنیم (مثلاً ۲ قرمز و ۱ آبی) → داده جدید قرمز دسته‌بندی می‌شود.
اگر K = 7 باشد: هفت همسایه بررسی می‌شود (مثلاً ۴ آبی و ۳ قرمز) → داده جدید آبی دسته‌بندی می‌شود.

این نشان می‌دهد مقدار K انتخابی، تأثیر زیادی بر نتیجه دارد! 🔥

کدنویسی KNN در پایتون 🐍

حالا یک مثال عملی با استفاده از Scikit-Learn می‌نویسیم. می‌خواهیم یک مجموعه داده ساده را با KNN آموزش دهیم.

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 1. بارگذاری مجموعه داده
iris = load_iris()
X = iris.data  # ویژگی‌ها
y = iris.target  # برچسب‌ها

# 2. تقسیم داده‌ها به مجموعه آموزش و تست
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. انتخاب مدل KNN با K=5
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)  # آموزش مدل

# 4. پیش‌بینی و ارزیابی مدل
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

print(f"دقت مدل KNN: {accuracy * 100:.2f}%")

✅ در این کد:

  • داده‌های Iris بارگذاری شده‌اند.
  • داده‌ها به مجموعه آموزش (80%) و تست (20%) تقسیم شده‌اند.
  • مدل KNN با K=5 آموزش داده شده است.
  • دقت مدل اندازه‌گیری شده است.

انتخاب مقدار مناسب K 🤔

انتخاب مقدار K خیلی مهم است!
📌 اگر K خیلی کوچک باشد (مثلاً 1 یا 2) → مدل حساس به نویز خواهد بود و ممکن است بیش‌برازش (Overfitting) کند.
📌 اگر K خیلی بزرگ باشد → مدل اطلاعات جزئی را از دست می‌دهد و ممکن است کم‌برازش (Underfitting) کند.

🔹 روش مناسب برای انتخاب K: تست مقادیر مختلف و پیدا کردن بهترین مقدار از طریق Cross Validation.

مزایا و معایب الگوریتم KNN 🚀⚠️

مزایا:
✔️ ساده و قابل فهم
✔️ نیازی به یادگیری مدل ندارد (Lazy Learning)
✔️ برای داده‌هایی با توزیع پیچیده خوب عمل می‌کند

معایب:
❌ محاسبات زیاد برای داده‌های بزرگ
❌ حساس به نویز و ویژگی‌های بی‌ربط
❌ نیاز به انتخاب مقدار مناسب K

جمع‌بندی 🎯

  • KNN یک الگوریتم یادگیری ماشین مبتنی بر همسایگی است که داده‌ها را بر اساس نزدیک‌ترین نقاط مشابه دسته‌بندی می‌کند.
  • مقدار K تأثیر زیادی روی عملکرد مدل دارد و باید به درستی انتخاب شود.
  • برای اجرای KNN در پایتون از کتابخانه Scikit-learn استفاده می‌کنیم.
  • این الگوریتم برای داده‌های کوچک و کاربردهای ساده بسیار مناسب است.