Sobes.tech
Middle

Čo je to algoritmus k najbližších susedov (kNN)?

sobes.tech AI

Odpoveď od AI

Algoritmus K-najbližších susedov (kNN) je jednoduchý, neparametrický algoritmus strojového učenia, ktorý sa používa na klasifikáciu aj regresiu.

Podstata: Priraďuje nový objekt (dátový bod) k triede, ktorá je najviac zastúpená medzi k najbližšími objektmi v tréningovej množine. Pre regresiu predpovedá hodnotu ako priemernú/mediánsku hodnotu k najbližších susedov.

Hlavné kroky pre klasifikáciu:

  1. Výber K: Určiť počet najbližších susedov (K).
  2. Výpočet vzdialenosti: Vypočítať vzdialenosť medzi novým objektom a každým objektom v tréningovej množine (napr. euklidovskou vzdialenosťou).
  3. Hľadanie K najbližších: Usporiadať objekty podľa vzdialenosti a vybrať K najbližších.
  4. Hlasovanie: Určiť triedu nového objektu na základe väčšinového hlasovania medzi K najbližšími susedmi.

Výhody:

  • Jednoduchosť implementácie a pochopenia.
  • Nevyžaduje učenie modelu (lenivý algoritmus).
  • Prispôsobí sa novým dátam, ako sa objavujú.

Nevýhody:

  • Výpočtovo náročný pri veľkých objemoch dát (v fáze predpovede).
  • Výber K a metriky vzdialenosti sú kritické.
  • Citlivý na škálu znakov a "prekliatie rozmernosti".
  • Nepracuje dobre s kategóriálnymi znakmi priamo (je potrebné kódovanie).

Použitie:

  • Rozpoznávanie vzorov.
  • Odporúčacie systémy.
  • Lekárska diagnostika.
  • Vyhľadávanie podobných dokumentov.
# Príklad implementácie kNN pre klasifikáciu s použitím 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

# Vytvorenie demonstračných dát
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]) # Triedy

# Rozdelenie dát na tréningovú a testovaciu množinu
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Vytvorenie a trénovanie modelu kNN
# K=3, teda 3 najbližší susedia
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

# Predikcia na testovacej množine
y_pred = knn.predict(X_test)

# Vyhodnotenie presnosti
accuracy = accuracy_score(y_test, y_pred)
# print(f"Presnosť modelu: {accuracy}")

# Predikcia pre nový bod
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Predikovaná trieda pre nový bod: {predicted_class[0]}")