Sobes.tech
Middle

Какво е алгоритъмът k-близки съседи (kNN)?

sobes.tech AI

Отговор от AI

Алгоритъмът за K най-близки съседи (kNN) е прост, непараметричен алгоритъм за машинно обучение, който се използва както за класификация, така и за регресия.

Същност: Приписва нов обект (точка от данни) към класа, който е най-репрезентиран сред k-те най-близки обекта в обучаващия набор. За регресия, предсказва стойност като средната/медианата на стойностите на k-те най-близки съседа.

Основни стъпки за класификация:

  1. Избор на K: Определете броя на най-близките съседи (K).
  2. Изчисляване на разстоянието: Изчислете разстоянието между новия обект и всеки обект в обучаващия набор (например, Евклидово разстояние).
  3. Намиране на K-те най-близки: Подредете обектите по разстояние и изберете K-те най-близки.
  4. Гласуване: Определете класа на новия обект въз основа на мнозинството гласове сред 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]}")