Middle
Co je to algoritmus k nejbližších sousedů (kNN)?
sobes.tech AI
Odpověď od AI
Algoritmus K nejbližších sousedů (kNN) je jednoduchý, neparemetrický algoritmus strojového učení, který se používá jak pro klasifikaci, tak pro regresi.
Podstata: Přiřadí nový objekt (datový bod) ke třídě, která je nejvíce zastoupena mezi k nejbližšími objekty v tréninkové sadě. Pro regresi předpovídá hodnotu jako průměr/medián hodnot k nejbližších sousedů.
Hlavní kroky pro klasifikaci:
- Výběr K: Určete počet nejbližších sousedů (K).
- Výpočet vzdálenosti: Spočítejte vzdálenost mezi novým objektem a každým objektem v tréninkové sadě (například euklidovskou vzdálenost).
- Najděte K nejbližších: Seřaďte objekty podle vzdálenosti a vyberte K nejbližších.
- Hlasování: Určete třídu nového objektu na základě většinového hlasování mezi K nejbližšími sousedy.
Výhody:
- Snadná implementace a pochopení.
- Nevyžaduje trénování modelu (lenivý algoritmus).
- Přizpůsobí se novým datům, jak přicházejí.
Nevýhody:
- Výpočetně náročný u velkých objemů dat (v fázi předpovědi).
- Výběr K a metriky vzdálenosti je kritický.
- Citlivý na škálu znaků a "prokletí rozměrnosti".
- Přímo nefunguje dobře s kategoriálními znaky (je třeba kódování).
Použití:
- Rozpoznávání vzorů.
- Doporučovací systémy.
- Lékařská diagnostika.
- Vyhledávání podobných dokumentů.
# Příklad implementace kNN pro klasifikaci 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
# Vytvoření demonstračních dat
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]) # Třídy
# Rozdělení dat na tréninkové a testovací sady
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Vytvoření a natrénování modelu kNN
# K=3, tedy 3 nejbližší sousedé
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
# Předpověď na testovací sadě
y_pred = knn.predict(X_test)
# Vyhodnocení přesnosti
accuracy = accuracy_score(y_test, y_pred)
# print(f"Přesnost modelu: {accuracy}")
# Předpověď pro nový bod
new_point = np.array([[3, 5]])
predicted_class = knn.predict(new_point)
# print(f"Předpovězená třída pro nový bod: {predicted_class[0]}")