Middle
Šta je algoritam k-najbližih suseda (kNN)?
sobes.tech АИ
Одговор од АИ
Алгоритам 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]}")