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?
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?
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.
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 .
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.
Inną opcję, jeśli szukasz rozwiązania „przyrostowego”, można znaleźć tutaj ...
Rozszerzenie LIBLINEAR, które pozwala na stopniowe uczenie się.