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:
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?
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:
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 .