Bardziej ogólne pytanie. Korzystam z SVM rbf do modelowania predykcyjnego. Myślę, że mój obecny program zdecydowanie potrzebuje przyspieszenia. Używam scikit learning z prostym do dokładnego wyszukiwania siatki + sprawdzania poprawności.
Każdy przebieg SVM zajmuje około minuty, ale mimo wszystkich iteracji wciąż uważam, że jest zbyt wolny. Zakładając, że w końcu mam wielowątkową część weryfikacji krzyżowej na wielu rdzeniach, jakieś zalecenia dotyczące przyspieszenia mojego programu? Jakieś szybsze implementacje SVM? Słyszałem o niektórych SVM GPU, ale nie zagłębiłem się w to zbyt wiele. Są użytkownicy i czy jest to szybsze?
Odpowiedzi:
Algorytm Sofii Google zawiera niezwykle szybką implementację liniowej maszyny SVM. Jest to jedna z najszybszych dostępnych maszyn SVM, ale myślę, że obsługuje tylko klasyfikację i obsługuje tylko liniowe maszyny SVM.
Jest nawet pakiet R !
źródło
Najłatwiejszym przyspieszeniem jest równoległe przeprowadzenie weryfikacji krzyżowej. Osobiście podoba mi się pakiet Caret w R , który używa foreach jako backendu. Ułatwia to przeprowadzanie weryfikacji krzyżowej i wyszukiwanie siatki na wielu rdzeniach lub wielu maszynach.
Caret może obsługiwać wiele różnych modeli, w tym SVM rbf:
Zauważ, że biblioteka doMC () jest dostępna tylko na Mac i Linux, powinna być uruchamiana z wiersza poleceń, a nie z GUI, i psuje wszelkie modele z RWeka. Łatwo jest również używać klastrów MPI lub SNOW jako równoległego zaplecza, które nie mają tych problemów.
źródło
Zdaję sobie sprawę, że jest to dość stare pytanie, ale możliwe jest również (w zależności od rozmiaru zestawu danych może być mniej lub bardziej skuteczne) użycie przybliżeń niskiego wymiaru mapy funkcji jądra, a następnie użycie jej w liniowej SVM. Zobacz http://scikit-learn.org/stable/modules/kernel_approximation.html
źródło
Zobacz moduł wieloprocesowy Pythona . Sprawia, że tworzenie równoległych elementów jest naprawdę łatwe i jest idealny do weryfikacji krzyżowej.
źródło
R ma świetny pakiet svm z akceleracją GPU , trenowanie na próbkach 20K * 100 wymiarów zajmuje ~ 20 sekund, a ja odkryłem, że procesor nigdy nie jest przez niego przeciążony, więc efektywnie wykorzystuje GPU. Wymaga to jednak karty graficznej NVIDIA.
źródło
Ostrzeżenie: jest to bezwstydna wtyczka.
Rozważ DynaML bibliotekę ML opartą na Scali, nad którą pracuję. Zaimplementowałem LS-SVM oparty na jądrze (maszyny wektorowe z obsługą najmniejszych kwadratów) wraz z automatycznym dostrajaniem jądra, za pomocą wyszukiwania siatki lub sprzężonego symulowanego wyżarzania.
http://mandar2812.github.io/DynaML/
źródło