Czy można dołączyć dane szkoleniowe do istniejących modeli SVM?

14

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?

mugetsu
źródło
Nie jestem pewien, co rozumiesz przez „wstawienie danych do istniejącego modelu”? Czy możesz podać przykład innej techniki (nie SVM), która pozwala ci to zrobić? Weźmy na przykład regresję logistyczną; jeśli dodasz nowe dane, uzyskasz nowy zestaw współczynników skuteczności ponownie przeszkolonych na istniejącym zestawie bez odniesienia do tego, które dane są „nowe” lub „stare”, to tylko dane treningowe. Wydaje mi się, że jeśli używasz solvera z gradientem opadania, możesz zaoszczędzić czas, inicjalizując wcześniej zoptymalizowane wartości, które prawdopodobnie będą zbliżone do nowego rozwiązania. Czy to masz na myśli?
Bogdanovist

Odpowiedzi:

17

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.

Matt Krause
źródło
1
Ciekawe, dziękuję za zgłoszenie się. Widziałem już wcześniej termin „online”, ale nie zdawałem sobie sprawy z jego technicznego znaczenia (myślałem, że dosłownie znaczy „Can Haz Internetz”).
Bogdanovist
Miło, że mogłem pomóc! Powinienem był o tym wspomnieć powyżej, ale niektóre algorytmy online / przyrostowe faktycznie przywiązują większą wagę do „najnowszych” przykładów, które mogą, ale nie muszą być przydatne, w zależności od twojej aplikacji (np. Świetne do przewidywania tematów Twittera, mniej niesamowite dla raka Badania).
Matt Krause,
12

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 .

rahulkmishra
źródło
(+1) Witamy na stronie. To dość wyczerpująca lista! :)
kardynał
4

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.

jpmuc
źródło
czy istnieje jakaś biblioteka stosująca tę metodę?
d.putto
najwyraźniej libsvm już to robi, a przynajmniej jakiś wariant algorytmu work.caltech.edu/~htlin/program/libsvm
jpmuc
1

Inną opcję, jeśli szukasz rozwiązania „przyrostowego”, można znaleźć tutaj ...

Liblinear Incremental

Rozszerzenie LIBLINEAR, które pozwala na stopniowe uczenie się.

Chantz Large
źródło