الگوریتم KNN چیست؟
KNN (K-Nearest Neighbors) یا الگوریتم K نزدیکترین همسایهها یکی از سادهترین و پرکاربردترین الگوریتمهای یادگیری ماشین (Machine Learning) است که برای دستهبندی (Classification)، رگرسیون (Regression) و گاهی تشخیص الگو (Pattern Recognition) استفاده میشود.
ایده اصلی KNN بسیار ساده است:
یک داده جدید را بر اساس شباهت آن به نزدیکترین دادههای موجود پیشبینی میکنیم.
به زبان ساده، KNN مانند این است که وقتی درباره یک فرد یا موضوع جدید اطلاعات کمی داریم، به افراد مشابه اطراف آن نگاه کنیم و بر اساس آنها تصمیم بگیریم.
KNN مخفف چیست؟
KNN مخفف:
K-Nearest Neighbors
است.
معنی بخشهای آن:
K → تعداد همسایههایی که بررسی میکنیم
Nearest → نزدیکترین
Neighbors → نمونههای موجود در داده
مثلاً:
اگر:
K = 5
باشد، الگوریتم ۵ نمونه نزدیکتر را بررسی میکند و بر اساس آنها نتیجه میدهد.
KNN چگونه کار میکند؟
فرض کنید مجموعهای از دادهها داریم که دو گروه دارند:
مشتریان خریدکننده
مشتریان غیرخریدار
حالا یک مشتری جدید وارد میشود.
KNN:
فاصله مشتری جدید را با تمام مشتریان قبلی محاسبه میکند.
نزدیکترین K مشتری را انتخاب میکند.
بر اساس آنها تصمیم میگیرد.
مثلاً:
اگر از ۵ همسایه نزدیک:
4 نفر خرید کردهاند
1 نفر خرید نکرده است
پیشبینی میشود:
این مشتری احتمالاً خرید خواهد کرد.
مثال ساده
فرض کنید اطلاعات افراد:
| قد | وزن | ورزشکار |
|---|---|---|
| 170 | 65 | بله |
| 175 | 70 | بله |
| 160 | 55 | خیر |
| 155 | 50 | خیر |
یک فرد جدید:
قد: 172
وزن: 68
دادههای نزدیکتر:
170،65 → ورزشکار
175،70 → ورزشکار
پس KNN نتیجه میگیرد:
ورزشکار = بله
مراحل اجرای الگوریتم KNN
مرحله ۱: انتخاب مقدار K
ابتدا مشخص میکنیم چند همسایه بررسی شوند.
مثال:
K = 3
یعنی سه نمونه نزدیک بررسی شوند.
مرحله ۲: محاسبه فاصله
برای پیدا کردن نزدیکترین همسایهها باید فاصله بین دادهها را محاسبه کنیم.
معروفترین روش:
فاصله اقلیدسی (Euclidean Distance)
فرمول:
[
d=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}
]
مثال:
دو نقطه:
A(2,3)
B(5,7)
فاصله:
[
\sqrt{(5-2)^2+(7-3)^2}
]
[
=\sqrt{9+16}
]
[
=5
]
انواع معیارهای فاصله در KNN
۱. فاصله اقلیدسی
رایجترین روش:
مناسب برای دادههای عددی.
۲. فاصله منهتن (Manhattan)
به جای خط مستقیم، مجموع حرکت افقی و عمودی را حساب میکند.
فرمول:
[
|x_2-x_1|+|y_2-y_1|
]
۳. فاصله کسینوسی (Cosine Similarity)
برای دادههای متنی بسیار کاربردی است.
مثلاً:
تحلیل متن
پردازش زبان طبیعی
مقایسه اسناد
کاربردهای KNN
۱. دستهبندی (Classification)
مهمترین کاربرد KNN است.
مثالها:
تشخیص بیماری
تشخیص ایمیل اسپم
تشخیص نوع گل
تشخیص تصویر
۲. رگرسیون (Regression)
در رگرسیون مقدار عددی پیشبینی میشود.
مثلاً:
پیشبینی:
قیمت خانه
میزان فروش
دمای هوا
در این حالت میانگین مقدار همسایهها محاسبه میشود.
۳. سیستمهای پیشنهاددهنده (Recommendation Systems)
مثلاً:
اگر کاربران مشابه شما فیلم خاصی دیدهاند، احتمالاً شما هم آن را دوست خواهید داشت.
کاربرد:
پیشنهاد فیلم
پیشنهاد محصول
پیشنهاد موسیقی
۴. تشخیص ناهنجاری (Anomaly Detection)
KNN میتواند دادههای غیرعادی را پیدا کند.
مثال:
تراکنش بانکی مشکوک
خطاهای صنعتی
رفتار غیرمعمول کاربران
انتخاب مقدار مناسب K
انتخاب مقدار K بسیار مهم است.
اگر K خیلی کوچک باشد:
مثلاً:
K = 1
مشکل:
حساسیت زیاد به نویز
احتمال بیشبرازش (Overfitting)
اگر K خیلی بزرگ باشد:
مشکل:
مدل بیش از حد ساده میشود
جزئیات مهم را از دست میدهد
معمولاً مقادیر آزمایشی مانند:
3
5
7
9
بررسی میشوند.
مزایای الگوریتم KNN
✅ ساده و قابل فهم
✅ نیاز به آموزش پیچیده ندارد
✅ مناسب برای دادههای کوچک
✅ قابل استفاده برای Classification و Regression
✅ انعطافپذیر
معایب KNN
❌ سرعت پایین در دادههای بزرگ
❌ مصرف حافظه زیاد
❌ حساس به ویژگیهای نامناسب
❌ حساس به مقیاس دادهها
❌ انتخاب K مناسب دشوار است
چرا باید دادهها را نرمالسازی کنیم؟
فرض کنید دو ویژگی داریم:
| ویژگی | مقدار |
|---|---|
| سن | 25 |
| درآمد | 100000 |
درآمد بسیار بزرگتر از سن است و فاصله را تحت تأثیر قرار میدهد.
بنابراین قبل از اجرای KNN معمولاً از روشهایی مانند:
Standardization
Min-Max Scaling
استفاده میشود.
مثال:
قبل:
سن: 25
درآمد: 100000
بعد از نرمالسازی:
سن: 0.3
درآمد: 0.8
تفاوت KNN با الگوریتمهای دیگر
| الگوریتم | روش کار |
|---|---|
| KNN | مقایسه با دادههای نزدیک |
| Decision Tree | ساخت قوانین تصمیم |
| SVM | پیدا کردن مرز جداسازی |
| Neural Network | یادگیری الگوهای پیچیده |
| Linear Regression | پیدا کردن رابطه خطی |
پیادهسازی ساده KNN در پایتون
با کتابخانه Scikit-learn:
from sklearn.neighbors import KNeighborsClassifier
# دادههای آموزشی
X = [
[170, 65],
[175, 70],
[160, 55],
[155, 50]
]
y = [
"Yes",
"Yes",
"No",
"No"
]
# ساخت مدل
model = KNeighborsClassifier(n_neighbors=3)
# آموزش
model.fit(X, y)
# پیشبینی داده جدید
result = model.predict([[172, 68]])
print(result)
خروجی:
['Yes']
KNN در یادگیری ماشین چه زمانی مناسب است؟
KNN انتخاب خوبی است وقتی:
✅ داده زیاد بزرگ نیست
✅ ساختار داده پیچیده است
✅ نیاز به مدل ساده دارید
✅ تفسیر نتیجه مهم است
اما برای دادههای بسیار بزرگ معمولاً الگوریتمهای دیگری مانند:
Random Forest
Gradient Boosting
Neural Networks
عملکرد بهتری دارند.
جمعبندی
الگوریتم KNN یکی از سادهترین الگوریتمهای یادگیری ماشین است که با استفاده از مفهوم شباهت و فاصله بین دادهها تصمیمگیری میکند.
ایده اصلی آن:
دادههای مشابه معمولاً رفتار مشابهی دارند.
به همین دلیل KNN در زمینههایی مانند تشخیص تصویر، سیستم پیشنهاددهنده، تحلیل داده، پزشکی، بازاریابی و دستهبندی متن کاربرد گستردهای دارد.