Jak zrozumiałem, k-NN jest algorytmem leniwego ucznia i nie wymaga fazy szkolenia. Dlaczego więc musimy używać .fit()
sklearn i co się dzieje, gdy go używamy?
Jak zrozumiałem, k-NN jest algorytmem leniwego ucznia i nie wymaga fazy szkolenia. Dlaczego więc musimy używać .fit()
sklearn i co się dzieje, gdy go używamy?
Na poziomie koncepcyjnym
Dopasowanie klasyfikatora oznacza przyjęcie zestawu danych jako danych wejściowych, a następnie wyprowadzenie klasyfikatora, który jest wybrany z przestrzeni możliwych klasyfikatorów. W wielu przypadkach klasyfikator jest identyfikowany - to znaczy odróżnia się od innych możliwych klasyfikatorów - przez zestaw parametrów. Parametry są zwykle wybierane przez rozwiązanie problemu optymalizacji lub innej procedury numerycznej. Ale w przypadku knn klasyfikator jest identyfikowany przez same dane treningowe. Tak więc, na poziomie abstrakcyjnym, dopasowanie klasyfikatora knn wymaga po prostu przechowywania zestawu treningowego.
Na poziomie wdrożenia
Ocena klasyfikatora KNN w nowym punkcie danych wymaga wyszukania jego najbliższych sąsiadów w zestawie treningowym, co może być kosztowną operacją, gdy zestaw treningowy jest duży. Jak wspomniano RUser, istnieją różne sztuczki, które przyspieszają to wyszukiwanie, które zazwyczaj działają poprzez tworzenie różnych struktur danych w oparciu o zestaw szkoleniowy. Ogólna idea jest taka, że niektóre prace obliczeniowe potrzebne do sklasyfikowania nowych punktów są w rzeczywistości wspólne dla różnych punktów. Tak więc tę pracę można wykonać z wyprzedzeniem, a następnie ponownie wykorzystać, zamiast powtarzać dla każdej nowej instancji. Wdrożenie przy użyciu tych sztuczek wykonałoby tę pracę na etapie szkolenia. Na przykład scikit-learn może budować drzewa kd lub drzewa piłki podczas wywołania fit()
funkcji.
Możesz go wdrożyć w leniwy sposób, a podczas odkrywania języka jest to przyzwoite ćwiczenie. (patrz na przykład jeden z moich postów na blogu ). Ale możesz również indeksować dane, aby dokonać prognozy (znacznie szybciej).
Gdyby przestrzeń cech miała wymiar jeden, sortowanie punktów według tej cechy pomogłoby ci znacznie szybciej znaleźć sąsiadów (na przykład wyszukiwanie dychotomiczne). W większym wymiarze nie ma naturalnego uogólnienia sortowania, ale można indeksować punkty za pomocą (na przykład) quadrees .
Patrząc na źródło , możesz zobaczyć, że w scikit learn zostały zaimplementowane różne metody. I jest pewne badania , które utrzymują poprawę tych najbliższego sąsiada kwerend.
Podczas gdy punkty, które przedstawili inni respondenci, są z pewnością ważne i interesujące, chciałbym zwrócić uwagę na jeszcze jedną rzecz z punktu widzenia inżynierii oprogramowania:
Aby był spójny z ich API
Estymatory sklearn powinny, między innymi, mieć fit
metodę, która przyjmuje jedną lub dwie tablice (w zależności od tego, czy jest to nadzorowany / nienadzorowany estymator) oraz szereg szczegółów specyficznych dla implementacji ( Źródło ).
Więc nawet gdyby fit
metoda knn nie zrobiła absolutnie nic, prawdopodobnie nadal by istniała, ponieważ knn jest estymatorem, a programiści sklearn, a także kod, który przekazują, oczekują, że estymatorzy będą mieli fit
metodę.