Przejdź do głównej zawartości

knn

czym jest k-nearest-neighbours? ⭐

  • KNN to prosty, intuicyjny model uczenia maszynowego, który służy głównie do klasyfikacji, ale może być też używany do regresji.
  • Działa na zasadzie "głosowania" (klasyfikacja) lub "średniej" (regresja) wśród k najbliższych sąsiadów (punktów treningowych) względem nowej próbki.
  • W klasyfikacji: nowy punkt otrzymuje klasę, która najczęściej występuje wśród sąsiadów.
  • W regresji: przewidywana wartość to średnia wartości sąsiadów.
  • Nie wymaga trenowania modelu – cała "nauka" to zapamiętanie danych treningowych.
  • K-Nearest Neighbor(KNN) Algorithm - geeksforgeeks.org
  • Wynik: przewidywana klasa (klasyfikacja) lub wartość liczbowa (regresja).

jak działa KNN? ⭐

  • Dla nowego punktu oblicz odległości do wszystkich punktów treningowych.
  • Wybierz k najbliższych sąsiadów (najmniejsze odległości).
  • W klasyfikacji: głosuj większością klas sąsiadów.
  • W regresji: weź średnią wartości sąsiadów.
  • Odległość najczęściej: euklidesowa, ale może być Manhattan, Minkowski, itp.

zastosowania

  • Rozpoznawanie obrazów (np. cyfry, twarze)
  • Systemy rekomendacji (np. filmy, produkty)
  • Wykrywanie anomalii
  • Klasyfikacja tekstu (np. spam/nie-spam)
  • Przewidywanie cen (regresja)

przykładowy kod (scikit-learn)

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# Generowanie danych
X, y = make_classification(n_samples=100, n_features=2, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Tworzenie i trenowanie modelu
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_train, y_train)

# Przewidywanie
y_pred = model.predict(X_test)
print(f"Dokładność: {model.score(X_test, y_test):.3f}")

praktyczne ćwiczenia

  • Zastosuj KNN do klasyfikacji danych iris.
  • Eksperymentuj z różnymi wartościami k (1, 3, 5, 7, 9).
  • Porównaj różne metryki odległości (euklidesowa, Manhattan).
  • Wizualizuj granice decyzyjne dla różnych k.
  • Zaimplementuj KNN od podstaw używając NumPy.

dobre praktyki

  • Normalizuj dane przed użyciem KNN (algorytm jest wrażliwy na skale).
  • Wybierz odpowiednie k (zbyt małe = overfitting, zbyt duże = underfitting).
  • Rozważ użycie wag dla sąsiadów (odległość jako waga).

wady i zalety

Zalety:

  • Prosty do zrozumienia i implementacji
  • Nie wymaga trenowania
  • Działa dobrze dla małych zbiorów danych
  • Naturalnie obsługuje wieloklasowe problemy

Wady:

  • Wolny dla dużych zbiorów danych
  • Wrażliwy na wymiarowość (curse of dimensionality)
  • Wymaga przechowywania wszystkich danych treningowych
  • Wrażliwy na nieistotne cechy!

polecane źródła