Aiutami a capire Support Vector Machines


76

Comprendo le basi di quale sia l'obiettivo di Support Vector Machines in termini di classificazione di un set di input in diverse classi, ma ciò che non capisco sono alcuni dettagli chiacchieroni. Per cominciare, sono un po 'confuso dall'uso di Slack Variables. Qual è il loro scopo?

Sto riscontrando un problema di classificazione in cui ho acquisito letture di pressione dai sensori che ho posizionato sulla soletta di una scarpa. Un soggetto si siederà, si fermerà e camminerà per un paio di minuti mentre vengono registrati i dati di pressione. Voglio formare un classificatore per essere in grado di determinare se una persona è seduta, in piedi o camminare ed essere in grado di farlo per eventuali dati di test futuri. Quale tipo di classificatore devo provare? Qual è il modo migliore per addestrare un classificatore dai dati che ho acquisito? Ho 1000 voci per stare seduti, in piedi e camminare (3x1000 = 3000 in totale), e tutti hanno il seguente modulo vettoriale funzione. (sensore di pressione1, sensore di pressione2, sensore di pressione3, sensore di pressione4)


Risposte:


103

Penso che stai cercando di iniziare da una brutta fine. Quello che si dovrebbe sapere su SVM per usarlo è solo che questo algoritmo sta trovando un iperpiano nell'iperspazio di attributi che separa meglio due classi, dove meglio significa con il più grande margine tra le classi (la conoscenza di come viene fatta è il tuo nemico qui, perché sfoca l'immagine generale), come illustrato da una famosa immagine come questa: testo alternativo

Ora, ci sono alcuni problemi rimasti.
Prima di tutto, cosa fare con quei cattivi outlier che giacciono spudoratamente in un centro di nuvola di punti di una classe diversa?
testo alternativo
A tal fine, consentiamo all'ottimizzatore di lasciare alcuni campioni etichettati erroneamente, ma punendo ciascuno di tali esempi. Per evitare l'opimizzazione multi-oggettiva, le penalità per i casi etichettati erroneamente vengono unite alla dimensione del margine con un uso del parametro C aggiuntivo che controlla l'equilibrio tra tali obiettivi.
Successivamente, a volte il problema non è lineare e non è possibile trovare un buon iperpiano. Qui, introduciamo il trucco del kernel: proiettiamo semplicemente lo spazio originale non lineare su uno di dimensione superiore con una trasformazione non lineare, ovviamente definita da un gruppo di parametri aggiuntivi, sperando che nello spazio risultante il problema sia adatto a un piano SVM:

testo alternativo

Ancora una volta, con un po 'di matematica e possiamo vedere che l'intera procedura di trasformazione può essere elegantemente nascosta modificando la funzione obiettivo sostituendo il prodotto punto degli oggetti con la cosiddetta funzione kernel.
Alla fine, tutto questo funziona per 2 classi e ne hai 3; cosa farne? Qui creiamo 3 classificatori di 2 classi (seduta - nessuna seduta, in piedi - nessuna posizione in piedi, camminata - nessuna camminata) e in classificazione combiniamo quelli con il voto.

Ok, quindi i problemi sembrano risolti, ma dobbiamo selezionare il kernel (qui ci consultiamo con la nostra intuizione e scegliere RBF) e inserire almeno alcuni parametri (C + kernel). E per questo dobbiamo avere una funzione obiettiva sicura per il sovrautilizzo, ad esempio l'approssimazione dell'errore dalla validazione incrociata. Quindi lasciamo il computer al lavoro, andiamo a prendere un caffè, torniamo e vediamo che ci sono alcuni parametri ottimali. Grande! Ora abbiamo appena iniziato la convalida incrociata nidificata per avere approssimazione dell'errore e voilà.

Questo breve flusso di lavoro è ovviamente troppo semplificato per essere del tutto corretto, ma mostra i motivi per cui penso che dovresti prima provare con la foresta casuale , che è quasi indipendente dai parametri, multiclasse nativamente, fornisce una stima degli errori imparziale ed esegue SVM quasi altrettanto buone .


5
(+1) Fantastico che tu abbia aggiunto alcune immagini per illustrare il tutto!
chl

3
@mbq Dato che sembri molto competente in SVM, lascia che ti chieda di chiarire il mio dubbio: una volta trovato l'iperpiano di separazione migliore, per cosa lo usiamo? Possiamo definire SVM come un metodo che, in primo luogo, sceglie l'hyperplane migliore per classificare correttamente i punti dati e, in secondo luogo, utilizza questo hyperplane per recidere i nuovi punti dati nelle due classi. Giusto? (Ho dei dubbi sulla seconda parte)
DavideChicco.it,

3
@ DavideChicco.it Fondamentalmente il problema principale dell'intera ML è quello di realizzare un modello che preveda in modo affidabile nuovi dati, quindi sì.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.