Ist es möglich, Trainingsdaten an vorhandene SVM-Modelle anzuhängen?


14

Ich verwende libsvm und habe festgestellt, dass ich jedes Mal, wenn ich svmtrain () aufrufe, ein neues Modell erstelle und es anscheinend keine Möglichkeit gibt, Daten in ein vorhandenes Modell einzufügen. Ist dies jedoch möglich? Sehe ich diesen Aspekt gerade nicht in libsvm?


Ich bin mir nicht sicher, was Sie unter "Daten in ein vorhandenes Modell einfügen" verstehen. Können Sie ein Beispiel für eine andere Technik (nicht SVM) nennen, mit der Sie dies tun können? Nehmen Sie zum Beispiel die logistische Regression. Wenn Sie neue Daten hinzufügen, erhalten Sie einen neuen Satz von Koeffizienten, die für den vorhandenen Satz neu trainiert wurden, ohne dass darauf hingewiesen wird, welche Daten "neu" oder "alt" sind. Es handelt sich lediglich um Trainingsdaten. Wenn Sie einen Solver vom Typ "Gradientenabstieg" verwenden, können Sie Zeit sparen, indem Sie die zuvor optimierten Werte initialisieren. Dies entspricht wahrscheinlich der neuen Lösung. Ist es das was du meinst?
Bogdanovist

Antworten:


17

Es hört sich so an, als würden Sie nach einem "inkrementellen" oder "online" Lernalgorithmus suchen. Mit diesen Algorithmen können Sie einen Klassifikator mit neuen Beispielen aktualisieren, ohne das Ganze von Grund auf neu zu trainieren.

Es ist definitiv mit Support-Vektor-Maschinen möglich, obwohl ich glaube, dass libSVM dies derzeit nicht unterstützt. Es könnte sich lohnen, einen Blick auf einige andere Pakete zu werfen, die es anbieten, einschließlich

PS: @Bogdanovist: Es gibt eine ziemlich umfangreiche Literatur dazu. kNN ist offensichtlich und trivial inkrementell. Man könnte (einige) Bayes-Klassifikatoren in inkrementelle Klassifikatoren umwandeln, indem man statt Wahrscheinlichkeiten Zählungen speichert. STAGGER, AQ * und einige (aber nicht alle) der ID * -Familie von Entscheidungsbaumalgorithmen sind ebenfalls inkrementell.


1
Interessant, danke für die Köpfe hoch. Ich hatte den Begriff "online" schon einmal gesehen, aber die technische Bedeutung nicht erkannt (ich dachte, er bedeutet wörtlich "can haz internetz").
Bogdanovist

Froh, dass ich Helfen kann! Ich hätte das oben erwähnen sollen, aber einige Online- / Inkremental-Algorithmen geben den "neuesten" Beispielen tatsächlich mehr Gewicht, was je nach Ihrer Anwendung nützlich oder nicht nützlich sein kann (z. B. großartig für die Vorhersage von Twitter-Themen, weniger beeindruckend für Krebs) Forschung).
Matt Krause

12

Die meisten Online- / inkrementellen SVM-Dienstprogramme sind für lineare Kernel vorgesehen, und ich nehme an, dass dies nicht so schwierig ist wie für nichtlineare Kernel.

Einige der derzeit verfügbaren bemerkenswerten Online / inkrementellen SVM-Tools:
+ Leon Bottous LaSVM : Unterstützt sowohl lineare als auch nichtlineare Kernel. C ++ Code
+ Bordes LaRank : Es unterstützt sowohl lineare als auch nichtlineare Kernel. C ++ Code. Es sieht so aus, als ob die Verknüpfung jetzt unterbrochen ist :-(
+ Inkrementeller und dekrementeller Code von Gert Cauwenberghs : Unterstützt sowohl lineare als auch nichtlineare Kernel. Matlab-Code.
+ Inkrementelles SVM-Lernen von Chris Diehl : Unterstützt sowohl lineare als auch nichtlineare Kernel. Matlab-Code.
+ Alistair Shiltons SVMHeavy : Nur binäre Klassifikation und Regression C ++ - Code
+ Francesco Parrellas OnlineSVR: Nur Regression. Matlab und C ++.
+ Pegasos : Sowohl linear als auch nicht linear. C-Code: Sowohl linear als auch nichtlinear. C- und Matlab-Code. Eine Java-Oberfläche .
+ Langfords Vowpal-Wabbit : Nicht sicher :-(
+ Koby Crammers MCSVM

Eine aktuellere Liste finden Sie auf meiner Quora-Antwort .


(+1) Willkommen auf der Seite. Das ist eine ziemlich vollständige Liste! :)
Kardinal

4

Eine andere Möglichkeit ist Alpha-Seeding . Mir ist nicht bekannt, ob libSVM dies unterstützt. Die Idee ist, eine große Menge an Trainingsdaten in Blöcke aufzuteilen. Dann trainierst du eine SVM auf dem ersten Stück. Da die resultierenden Support-Vektoren nichts anderes als einige der Stichproben Ihrer Daten sind, verwenden Sie diese, um Ihre SVM mit dem nächsten Block zu trainieren. Außerdem verwenden Sie diese SVM, um eine anfängliche Schätzung der Alpha-Werte für die nächste Iteration (Seeding) zu berechnen. Daher gibt es zwei Vorteile: Jedes der Probleme ist kleiner und durch intelligente Initialisierung konvergieren sie noch schneller. Auf diese Weise vereinfachen Sie ein großes Problem und lösen nacheinander eine Reihe von einfacheren Schritten.


Gibt es eine Bibliothek, die diese Methode anwendet?
d.putto

Anscheinend macht es libsvm bereits oder zumindest eine Variante des Algorithmus work.caltech.edu/~htlin/program/libsvm
jpmuc

1

Eine weitere Option, wenn Sie eine "inkrementelle" Lösung suchen, finden Sie hier ...

Liblinear Inkremental

Eine Erweiterung von LIBLINEAR, die inkrementelles Lernen ermöglicht.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.