Middle
Какво е алгоритъмът k-близки съседи (kNN)?
sobes.tech AI
Отговор от AI
Алгоритъмът за K най-близки съседи (kNN) е прост, непараметричен алгоритъм за машинно обучение, който се използва както за класификация, така и за регресия.
Същност: Приписва нов обект (точка от данни) към класа, който е най-репрезентиран сред k-те най-близки обекта в обучаващия набор. За регресия, предсказва стойност като средната/медианата на стойностите на k-те най-близки съседа.
Основни стъпки за класификация:
- Избор на K: Определете броя на най-близките съседи (K).
- Изчисляване на разстоянието: Изчислете разстоянието между новия обект и всеки обект в обучаващия набор (например, Евклидово разстояние).
- Намиране на K-те най-близки: Подредете обектите по разстояние и изберете K-те най-близки.
- Гласуване: Определете класа на новия обект въз основа на мнозинството гласове сред K-те най-близки съседа.
Предимства:
- Лесна за изпълнение и разбиране.
- Не изисква обучение на модел (мързелив алгоритъм).
- Адаптира се към нови данни, когато те се появяват.
Недостатъци:
- Изчислително скъп при големи обеми данни (в етапа на предсказване).
- Изборът на K и метриката за разстояние е критичен.
- Чувствителен към мащаба на признаците и към "проклятието на размерността".
- Не работи добре директно с категорийни признаци (изисква кодиране).
Приложения:
- Разпознаване на образи.
- Системи за препоръки.
- Медицинска диагностика.
- Търсене на подобни документи.
# Пример за реализиране на kNN за класификация с използване на scikit-learn
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
# Създаване на демонстрационни данни
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y = np.array([0, 0, 1, 1, 0, 1]) # Метки на класовете
# Разделяне на данните на обучаващи и тестови набори
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Създаване и обучение на модел kNN
# K=3, тоест 3 най-близки съседа
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Предсказване върху тестовия набор
y_pred = knn.predict(X_test)
# Оценка на точността
accuracy = accuracy_score(y_test, y_pred)
# print(f"Точност на модела: {accuracy}")
# Предсказване за нова точка
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Предсказан клас за новата точка: {predicted_class[0]}")