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:
- Výber K: Určiť počet najbližších susedov (K).
- 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).
- Hľadanie K najbližších: Usporiadať objekty podľa vzdialenosti a vybrať K najbližších.
- 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]}")