Używam libsvm i zauważyłem, że za każdym razem, gdy wywołuję svmtrain (), tworzę nowy model i wydaje się, że nie ma opcji umieszczenia danych w istniejącym modelu. Czy to jednak możliwe? Czy po prostu nie widzę tego aspektu w libsvm?
14
Odpowiedzi:
Wygląda na to, że szukasz algorytmu uczenia się „przyrostowego” lub „online”. Algorytmy te pozwalają zaktualizować klasyfikator o nowe przykłady, bez konieczności ponownego szkolenia całego od zera.
Z pewnością jest to możliwe w przypadku maszyn obsługujących wektor, chociaż uważam, że libSVM obecnie go nie obsługuje. Warto spojrzeć na kilka innych pakietów, które go oferują, w tym
PS: @Bogdanovist: Istnieje na ten temat dość obszerna literatura. kNN jest oczywiście i trywialnie przyrostowy. Można zmienić (niektóre) klasyfikatory bayesowskie w klasyfikatory przyrostowe, przechowując liczby zamiast prawdopodobieństw. STAGGER, AQ * i niektóre (ale nie wszystkie) z rodziny algorytmów drzewa decyzyjnego ID * są również przyrostowe, od czubka głowy.
źródło
Większość narzędzi SVM online / przyrostowych jest przeznaczona dla jąder liniowych i przypuszczam, że nie jest to tak trudne, jak dla jąder nieliniowych.
Niektóre z obecnie dostępnych online / przyrostowych narzędzi SVM:
+ LaSVM Leona Bottousa : Obsługuje zarówno jądra liniowe, jak i nieliniowe. Kod C ++
+ LaRank Bordesa : Obsługuje zarówno jądra liniowe, jak i nieliniowe. Kod C ++. Wygląda na to, że link jest teraz zerwany :-(
+ Kod inkrementalny i dekrementalny Gert Cauwenberghs : obsługuje zarówno jądra liniowe, jak i nieliniowe. Kod Matlab.
+ Nauka przyrostowa SVM Chrisa Diehla : obsługuje zarówno jądra liniowe, jak i nieliniowe. Kod Matlab.
+ Alistair Shilton's SVMHeavy : Tylko binarna klasyfikacja i regresja Kod C ++
+ OnlineSVR Francesco Parrella: Tylko regresja. Matlab i C ++.
+ Pegaz : zarówno liniowy, jak i nieliniowy. Kod C i Matlab. Interfejs java . Koby Crammer MCSVM : Zarówno liniowy, jak i nieliniowy. Kod C
+ Langow's Vowpal Wabbit : Nie jestem pewien :-(
+
Bardziej zaktualizowaną listę można znaleźć w mojej odpowiedzi Quora .
źródło
Inną możliwością jest wysiew alfa . Nie wiem, czy libSVM to obsługuje. Chodzi o podzielenie ogromnej ilości danych treningowych na części. Następnie trenujesz SVM na pierwszej porcji. Ponieważ powstałe wektory pomocnicze są niczym innym, jak tylko niektórymi przykładami twoich danych, bierzesz je i używasz ich do trenowania SVM z następną porcją. Ponadto używasz tej maszyny SVM do obliczenia wstępnego oszacowania wartości alfa dla następnej iteracji (seeding). Dlatego korzyści są dwojakie: każdy problem jest mniejszy, a dzięki inteligentnej inicjalizacji zbiegają się jeszcze szybciej. W ten sposób upraszczasz ogromny problem, rozwiązując kolejno serię prostszych kroków.
źródło
Inną opcję, jeśli szukasz rozwiązania „przyrostowego”, można znaleźć tutaj ...
Liblinear Incremental
Rozszerzenie LIBLINEAR, które pozwala na stopniowe uczenie się.
źródło