Sobes.tech
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:

  1. Výběr K: Určete počet nejbližších sousedů (K).
  2. 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).
  3. Najděte K nejbližších: Seřaďte objekty podle vzdálenosti a vyberte K nejbližších.
  4. 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]}")