Sto usando libsvm e ho notato che ogni volta che chiamo svmtrain (), creo un nuovo modello e che non sembra esserci alcuna opzione per inserire i dati in un modello esistente. È possibile farlo comunque? Non vedo questo aspetto in libsvm?
Sto usando libsvm e ho notato che ogni volta che chiamo svmtrain (), creo un nuovo modello e che non sembra esserci alcuna opzione per inserire i dati in un modello esistente. È possibile farlo comunque? Non vedo questo aspetto in libsvm?
Risposte:
Sembra che tu stia cercando un algoritmo di apprendimento "incrementale" o "online". Questi algoritmi ti consentono di aggiornare un classificatore con nuovi esempi, senza riqualificare il tutto da zero.
È sicuramente possibile con le macchine vettoriali di supporto, anche se credo che libSVM al momento non lo supporti. Potrebbe valere la pena dare un'occhiata a molti altri pacchetti che lo offrono, incluso
PS: @Bogdanovist: C'è una letteratura piuttosto ampia su questo. kNN è ovviamente e banalmente incrementale. Si potrebbero trasformare (alcuni) classificatori bayesiani in classificatori incrementali memorizzando i conteggi anziché le probabilità. Anche STAGGER, AQ * e alcuni (ma non tutti) gli algoritmi della famiglia ID * dell'albero delle decisioni sono incrementali, al di sopra della mia testa.
La maggior parte delle utility SVM online / incrementali sono per kernel lineari e suppongo che non sia così difficile come per i kernel non lineari.
Alcuni dei notevoli strumenti SVM online / incrementali attualmente disponibili:
+ LaSVM di Leon Bottous : supporta kernel sia lineari che non lineari. Codice C ++
+ Bordes's LaRank : supporta kernel sia lineari che non lineari. Codice C ++. Sembra che il collegamento non sia stato interrotto ora :-(
+ codice incrementale e decrementale di Gert Cauwenberghs : supporta kernel sia lineari che non lineari. Codice Matlab.
+ App SVM incrementale di Chris Diehl : supporta kernel sia lineari che non lineari. Codice Matlab.
+ Codice Allair Shilton's SVMHeavy : solo classificazione binaria e regressione Codice C ++
+ OnlineSVR di Francesco Parrella: Solo regressione. Matlab e C ++.
+ Pegasos : sia lineare che non lineare. Codice C e Matlab. Un'interfaccia java .
+ Langford's Vowpal Wabbit : Non sono sicuro :-(
+ Koby Crammer MCSVM : sia lineare che non lineare. Codice C
Un elenco più aggiornato è disponibile nella mia risposta Quora .
Un'altra possibilità è la semina alfa . Non so se libSVM lo supporta. L'idea è quella di dividere un'enorme quantità di dati di allenamento in blocchi. Quindi si allena un SVM sul primo pezzo. Poiché i vettori di supporto risultanti non sono altro che alcuni dei campioni dei tuoi dati, li prendi e li usi per addestrare il tuo SVM con il prossimo pezzo. Inoltre, si utilizza tale SVM per calcolare una stima iniziale dei valori alfa per la successiva iterazione (seeding). Pertanto, i vantaggi sono duplici: ciascuno dei problemi è più piccolo e attraverso l'inizializzazione intelligente convergono ancora più velocemente. In questo modo si semplifica un enorme problema nella risoluzione sequenziale di una serie di passaggi più semplici.
Un'altra opzione se stai cercando una soluzione "incrementale" può essere trovata qui ...
Un'estensione di LIBLINEAR che consente l'apprendimento incrementale.