Dopo aver parlato dei dataset per i problemi di IA e di come i dati contenuti nei dataset siano oro colato per i data scientist, in questo post proverò quindi a presentare uno degli algoritmi più noti e diffusi di apprendimento automatico utilizzato per risolvere i problema di classificazione e regressione: il SVM (Support Vector Machine).
Spiegazione Algoritmo Support Vector Machine (SVM)
Definizione SVM
“Le macchine a vettori di supporto utilizzano i dati etichettati per definire un iperpiano con cui suddividere e classificare gli elementi presenti nel dataset.”
oppure come proposto su wikipedia
"Le macchine a vettori di supporto (SVM, dall'inglese support-vector machines) sono dei modelli di apprendimento supervisionato associati ad algoritmi di apprendimento per la classificazione. Dato un insieme di esempi per l'addestramento, ognuno dei quali etichettato con la classe di appartenenza fra le due possibili classi, un algoritmo di addestramento per le SVM costruisce un modello che assegna i nuovi esempi a una delle due classi, ottenendo quindi un classificatore lineare binario non probabilistico. Un modello SVM è una rappresentazione degli esempi come punti nello spazio, mappati in modo tale che gli esempi appartenenti alle due diverse categorie siano chiaramente separati da uno spazio il più possibile ampio. I nuovi esempi sono quindi mappati nello stesso spazio e la predizione della categoria alla quale appartengono viene fatta sulla base del lato nel quale ricade."
Che vuol dire?
Per spiegarvi meglio la definizione precedente voglio valutare il problema di classificazione binaria (ovvero fra due classi). Ancora più nello specifico, consideriamo che siano solo 2 le features utilizzate per classificare le istanze del dataset.
È quindi possibile rappresentare le istanze in un spazio cartesiano 2D. L’algoritmo traccerà una retta (nel caso lineare) per suddividere le istanze delle due classi in base alla classe a cui appartengono. Questa retta servirà quindi per classificare le istanze non etichettate.
Nella Figura sopra sono riportate le istanze del dataset suddivise in base alle features scelte per la classificazione x1 e x2. SVM definisce quindi una linea che suddivida equamente le istanze delle due classi. Nuovi elementi non etichettati saranno quindi classificati nella seguente maniera:
se si troveranno al di sopra della linea rossa saranno classificati appartenenti alla classe blue;
se si troveranno al di sotto della linea rossa saranno classificati appartenenti alla classe verde.
Esistono vari kernel: noi abbiamo visto quello lineare, che il più semplice, ma sono disponibili per l’uso anche il kernel polinominale, quello esponenziale oppure è possibile crearne uno personalizzato. Cambiando kernel sarà quindi possibile utilizzare altre funzioni matematiche più complesse (come iperboli e parabole) per suddividere le istanze del dataset.
È importante notare che non sempre è possibile suddividere tutte le istanze del dataset nella maniera corretta come nel primo esempio presentato.
In questa seconda Figura viene mostrato come l’utilizzo di un kernel lineare non permetta di risolvere il problema. Probabilmente utilizzando un altro kernel si potrebbero ottenere risultati migliori. Non sempre ciò è possibile!
Prima di terminare voglio mostrare con una terza Figura l’utilizzo di SVM nel caso in cui vengano utilizzate 3 features per la classificazione. In questo caso anziché tracciare una retta, viene utilizzato un piano.
In conclusione, il suddetto algoritmo è molto utilizzato perché efficiente ed efficace (ovvero produce buoni risultati di classificazione) ed esistono varie implementazioni, tra cui vi consiglio la versione presente nella libreria sklearn.
Spoiler
Nel prossimo post presenterò un caso di studio relativo ad un semplice problema di classificazione, in cui utilizzerò SVM.
Sono appassionato di Intelligenza Artificiale e nel 2020 ho ricevuto il Ph.D. in Visione Artificiale presso l'Università degli Studi di Parma.
Se vuoi ricevere maggiori informazioni sull'articolo o sui progetti che sto svolgendo visita il mio sito web.
Comments