Sobes.tech
Middle

Šta je algoritam k-najbližih suseda (kNN)?

sobes.tech АИ

Одговор од АИ

Алгоритам 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]}")