KNN

Metoda k najbliższych sąsiadów (ang. k-nearest neighbors, KNN) to popularna metoda uczenia nienadzorowanego, stosowana w klasyfikacji i regresji. Jest to jedna z najprostszych metod uczenia maszynowego, która polega na przewidywaniu etykiety danego obiektu na podstawie etykiet jego k najbliższych sąsiadów.

Aby zastosować tę metodę, należy najpierw określić, ile sąsiadów ma być branych pod uwagę (parametr k). Następnie dla każdego obiektu spośród tych, dla których chcemy przewidzieć etykietę, znajduje się k obiektów o najmniejszej odległości według określonego miary (np. odległość euklidesowa). Etykieta przewidywana dla danego obiektu to najczęściej występująca etykieta wśród jego k najbliższych sąsiadów.

Metoda KNN jest prosta w implementacji i nie wymaga dużo czasu na trenowanie modelu, ponieważ nie wymaga uczenia się na danych treningowych. Zamiast tego, wszystkie dane są używane do przewidywania etykiet dla nowych obiektów.

Zalety / wady:

Jedną z głównych zalet tej metody jest jej elastyczność – może być ona stosowana w wielu różnych sytuacjach i dla różnych rodzajów danych. Ma jednak pewne ograniczenia, takie jak słaba skalowalność w przypadku dużych zbiorów danych oraz brak interpretowalności modelu.

Aby zwiększyć skuteczność metody KNN, można zastosować pewne techniki, takie jak standaryzacja danych czy optymalizacja hiperparametru k. Można również zastosować bardziej skomplikowane miary odległości, takie jak odległość Mahalanobisa.

Ogólnie rzecz biorąc, metoda k najbliższych sąsiadów to prosta, ale skuteczna metoda uczenia nienadzorowanego, która może być stosowana w różnych sytuacjach klasyfikacyjnych i regresyjnych. Choć ma pewne ograniczenia, takie jak słaba skalowalność i brak interpretowalności modelu, można ją zwiększyć jej skuteczność poprzez zastosowanie odpowiednich technik i miar odległości. Warto rozważyć stosowanie tej metody, gdy mamy do czynienia z niewielkim zbiorem danych lub chcemy szybko otrzymać wyniki klasyfikacji.

Przykład:

from sklearn.neighbors import KNeighborsClassifier

# Przygotowanie danych - załóżmy, że mamy zbiór treningowy zawierający cechy dwóch klas oraz ich etykiety
X = [[1, 2], [2, 4], [3, 6], [4, 8]]  # cechy
y = [0, 0, 1, 1]  # etykiety

# Utworzenie modelu KNN z k=3
model = KNeighborsClassifier(n_neighbors=3)

# Trenowanie modelu na danych treningowych
model.fit(X, y)

# Przewidywanie etykiet dla nowych danych
predictions = model.predict([[5, 10], [1, 3]])

# Wynik: predictions zawiera [1, 0] - czyli przewiduje, że pierwszy obiekt należy do klasy 1, a drugi do klasy 0

W tym przykładzie użyto modelu KNN z k=3, co oznacza, że dla każdego obiektu bierze się pod uwagę trzech najbliższych sąsiadów. Następnie model został trenowany na danych treningowych (X i y) i wykorzystany do przewidywania etykiet dla nowych danych (w tym przypadku dwóch obiektów o cechach [5, 10] i [1, 3]).