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
- K-Nearest Neighbors – scikit-learn
- KNN Algorithm – Towards Data Science
- K-Nearest Neighbors – StatQuest (YouTube)
- KNN Tutorial – Machine Learning Mastery