Support Vector Machine (SVM)

Che cos’è la Support Vector Machine?

La Support Vector Machine (SVM) è un algoritmo di Machine Learning con supervisione in grado di trovare l’iperpiano migliore per separare i punti di dati di una classe da quelli di un’altra classe.

Come funzionano le Support Vector Machine

La Support Vector Machine è un algoritmo di Machine Learning con supervisione spesso utilizzato nei problemi di classificazione e regressione in applicazioni quali l’elaborazione di segnali, l’elaborazione del linguaggio naturale (NLP) e il riconoscimento immagini e vocale. L’obiettivo dell’algoritmo SVM consiste nel trovare un iperpiano in grado di separare al meglio i punti di dati di una classe da quelli di un’altra classe. Questo iperpiano può essere una linea per lo spazio 2D o un piano per uno spazio n-dimensionale, dove n indica il numero di feature per ogni osservazione nel set di dati. Possono esistere più iperpiani che separano le classi nei dati. L’iperpiano ottimo, derivato dall’algoritmo SVM, è quello che massimizza il margine tra le due classi.

Il margine è la larghezza massima dell’area parallela all’iperpiano che non ha punti di dati interni. I punti di dati che contrassegnano il confine di questa area parallela e che sono più vicini all’iperpiano di separazione sono i vettori di supporto. I vettori di supporto fanno riferimento a un sottoinsieme di osservazioni di addestramento che identificano la posizione dell’iperpiano di separazione.

Illustrazione dell’iperpiano identificato mediante la Support Vector Machine, mostrato con i vettori di supporto, il margine e i punti di dati separati in due classi.

Uso di un algoritmo SVM per massimizzare la larghezza del margine tra due classi, rappresentate da segni più e meno e separate da un iperpiano.

Workflow per la modellazione di una SVM

Il workflow tipico per realizzare un modello di Support Vector Machine comprende i seguenti passaggi:

Pre-elaborazione dei dati

Addestrare un modello di SVM con dati grezzi spesso porta a scarsi risultati per via di outlier e valori mancanti, ma anche a causa della ridondanza delle informazioni. È possibile eseguire la pulizia dei dati per gestire eventuali valori mancanti o outlier e l’estrazione delle feature per scegliere il set di feature corretto dai dati.

L’estrazione delle feature trasforma i dati grezzi in feature numeriche che possono essere elaborate preservando al contempo le informazioni del set di dati originale. Le tecniche di riduzione della dimensionalità, come l’analisi dei componenti principali (PCA), riducono il numero di feature preservando al contempo le informazioni più importanti. Tale approccio rende i modelli di Support Vector Machine robusti e capaci di gestire set di dati complessi.

Una volta elaborati, i dati vanno suddivisi in set di addestramento e di test. Usa la validazione incrociata per suddividere i dati in modo ottimale. Il modello di SVM viene addestrato con il set di dati di addestramento, mentre il set di dati di test viene utilizzato per valutare le prestazioni del modello su dati non osservati.

Scelta del kernel

In base alla distribuzione dei dati, occorre scegliere una funzione kernel appropriata (lineare, polinomiale, RBF, ecc.). Se la separazione lineare non è praticabile, una funzione kernel trasforma i dati in uno spazio a maggiore dimensionalità, semplificando la separazione delle classi.

Scelta del kernel adatto alla propria SVM
Tipo di SVM Kernel di Mercer Descrizione
Funzione a base radiale (RBF) o gaussiano \( K({x_1},{x_2})=exp(−‖{x_1}−{x_2}‖22{σ^2}) \) Apprendimento di una classe. \( σ \) è la larghezza del kernel.
Lineare \( K({x_1},{x_2})={x_1}T{x_2} \) Apprendimento di due classi.
Polinomiale \( K({x_1},{x_2})=({x_1}T{x_2}+1)ρ \) \( ρ \) è l’ordine del polinomio.
Sigmoidea \( K({x_1},{x_2})=tanh({β_0}{x_1}T{x_2}+{β_1}) \) Si tratta di un kernel di Mercer solo per alcuni valori \( β_0 \) e \( β_1 \).

Addestramento del modello di SVM

Realizza e addestra il tuo modello di SVM usando un set di dati di addestramento. Addestrare una Support Vector Machine corrisponde a risolvere un problema di ottimizzazione quadratica per trovare un iperpiano che massimizza il margine tra le classi. L’algoritmo della Support Vector Machine identifica i vettori di supporto e determina l’iperpiano ottimale. Serviti del modello addestrato per classificare punti di dati nuovi e non osservati sulla base dell’iperpiano ottimale.

Valutazione del modello di SVM

Testa il modello con il set di dati di test. Valuta le prestazioni del modello servendoti di metriche quali accuratezza, matrice di confusione, precisione, F1-score o richiamo.

Ottimizzazione degli iperparametri

Regola gli iperparametri in modo da migliorare le prestazioni del modello. Implementa una tecnica di ricerca, come l’ottimizzazione bayesiana, che usa modelli probabilistici per trovare gli iperparametri ottimali.

Tipi di classificatori SVM

Support Vector Machine lineari

Le SVM lineari vengono utilizzate per i dati linearmente separabili che hanno esattamente due classi. Questo tipo di algoritmo della Support Vector Machine usa un confine lineare di decisione per separare tutti i punti di dati delle due classi.

L’algoritmo SVM è in grado di trovare tale iperpiano solo per i problemi separabili linearmente. Per le attività più complesse, in cui i dati non sono separabili, la Support Vector Machine può utilizzare un margine detto “soft”, ovvero un iperpiano che separa molti punti di dati, ma non tutti. L’algoritmo massimizza il margine “soft” permettendo di fare pochi errori di classificazione.

Grafico MATLAB che illustra una Support Vector Machine con un margine “soft” che permette un errore di classificazione per separare le classi.

SVM a margine “soft” che consente l’errata classificazione di un punto di dati dalla classe -1 (blu). (cfr. documentazione MATLAB).

Support Vector Machine non lineari

Le SVM vengono utilizzate anche per attività di regressione e classificazione non lineare. Per i dati non separabili in modo lineare, le Support Vector Machine non lineari usano le funzioni kernel per trasformare le feature. Il numero di feature trasformate è determinato dal numero di vettori di supporto.

Le funzioni kernel mappano i dati su uno spazio diverso, spesso a maggiore dimensionalità. Questa trasformazione può rendere la separazione delle classi più facile semplificando il complesso confine non lineare di decisione in un confine lineare nello spazio delle feature mappato a maggiore dimensionalità. In questo processo, comunemente noto come kernel trick, i dati non devono essere esplicitamente trasformati, il che sarebbe oneroso da un punto di vista computazionale. Le funzioni kernel per i dati non lineari includono i polinomi, la funzione a base radiale (gaussiano) e la rete multilayer perceptron o sigmoidea (rete neurale).

Grafico a dispersione MATLAB che illustra una Support Vector Machine con un iperpiano che separa i punti di dati in due classi.

Classificatore SVM non lineare addestrato in MATLAB con un kernel gaussiano (cfr. codice).

Regressione a vettori di supporto

Le SVM vengono principalmente utilizzate per operazioni di classificazione, ma possono essere adattate anche alla regressione. La regressione SVM è considerata una tecnica non parametrica in quanto si basa sulle funzioni kernel. A differenza della regressione lineare, in cui la relazione tra la risposta (output) e le variabili predittive (input) è nota, l’obiettivo della regressione a vettori di supporto (SVR) è trovare questa relazione. Per farlo, la SVR identifica l’iperpiano che approssima i dati nel miglior modo possibile rispettando un margine di tolleranza predefinito, detto margine, mantenendo al contempo l’errore di previsione a livelli minimi.

Il principio di funzionamento della SVR è uguale a quello dei classificatori SVM, tranne per il fatto che la SVR ha lo scopo di prevedere valori continui invece di classi discrete. La SVR riesce a gestire sia i dati lineari che quelli non lineari usando tipi di kernel differenti. Grazie a questo kernel trick, è possibile eseguire la regressione non lineare mappando i dati su uno spazio ad alta dimensionalità.

Perché le Support Vector Machine sono importanti

Vantaggi delle SVM

Le SVM sono tra gli algoritmi di apprendimento supervisionato più popolari in ambito di Machine Learning e intelligenza artificiale, principalmente perché sono in grado di gestire in modo efficace dati ad alta dimensionalità e confini di decisione complessi. I principali vantaggi delle Support Vector Machine sono i seguenti:

  • Versatilità dei dati. Le SVM sono particolarmente efficaci nella gestione di set di dati non strutturati e ad alta dimensionalità. Le Support Vector Machine possono essere utilizzate sia per i dati lineari che per quelli non lineari, per cui sono utili in molte applicazioni.
  • Robustezza. Le SVM sono meno soggette all’overfitting, soprattutto negli spazi ad alta dimensionalità, grazie al parametro di regolarizzazione che controlla il trade-off tra l’ottenimento di un basso livello di errori nell’addestramento dei dati e la riduzione al minimo della norma dei pesi.
  • Interpretabilità. Il confine di decisione creato da un classificatore SVM lineare è chiaro e interpretabile, il che può essere vantaggioso per comprendere le previsioni del modello e prendere decisioni informate.
  • Accuratezza. Le SVM sono altamente accurate ed efficaci con i set di dati più piccoli, soprattutto nei casi in cui il numero di dimensioni supera il numero di campioni.

Applicazioni delle SVM

I suddetti vantaggi rendono le Support Vector Machine un’opzione molto interessante per la modellazione di dati in una vasta serie di applicazioni:

  • Elaborazione del linguaggio naturale. Le SVM vengono ampiamente utilizzate in attività di elaborazione del linguaggio naturale, come il rilevamento dello spam e la sentiment analysis tramite la classificazione del testo in categorie.
  • Visione artificiale. Le SVM vengono impiegate in attività di classificazione delle immagini, come il riconoscimento del testo scritto a mano e il rilevamento di volti e oggetti, così come in qualità di strumento diagnostico in ambito medico per la classificazione di immagini di risonanza magnetica che potrebbero indicare la presenza di un tumore.
  • Elaborazione di segnali. Le SVM vengono applicate anche ai dati di segnali per attività quali il rilevamento di anomalie, il riconoscimento vocale e l’analisi dei segnali biomedici.
  • Rilevamento di anomalie. Le SVM possono essere addestrate in modo da trovare un iperpiano che separa i dati normali dalle anomalie.
  • Bioinformatica. Le SVM vengono impiegate nella classificazione dei dati biologici, per la classificazione delle proteine e l’analisi dei profili di espressione genica.
Immagine RGB iperspettrale con mappa delle verità di base e mappa di classificazione con SVM.

Immagine iperspettrale classificata con un classificatore SVM. (Cfr. codice MATLAB.)

Svantaggi delle SVM

Come tutti i modelli di Machine Learning, anche le Support Vector Machine hanno dei limiti:

  • Set di dati di grandi dimensioni. Le SVM non sono adatte a gestire set di dati di grandi dimensioni per via del loro elevato costo computazionale e dei requisiti in termini di memoria. Sebbene il kernel trick consenta alle Support Vector Machine di gestire i dati non lineari, le rende onerose dal punto di vista computazionale. Le SVM richiedono la risoluzione di un problema di ottimizzazione quadratica. Per i set di dati di grandi dimensioni, anche la matrice kernel sarebbe grande e aumenterebbe i requisiti in termini di memoria.
  • Dati rumorosi. Le SVM non sono adatte ai dati rumorosi in quanto hanno lo scopo di massimizzare il margine tra le classi.
  • Interpretabilità. Mentre le SVM lineari sono interpretabili, quelle non lineari non lo sono. Le trasformazioni complesse previste dalle SVM non lineari rendono il confine di decisione difficile da interpretare.
Grafico che mostra algoritmi di Machine Learning raffigurati con l’interpretabilità sull’asse x e il rispettivo potere predittivo sull’asse y. Le SVM hanno una bassa interpretabilità ma un elevato potere predittivo.

Confronto tra il potere predittivo e l’interpretabilità degli algoritmi di Machine Learning più noti.

Le Support Vector Machine con MATLAB

Con MATLAB® e Statistics and Machine Learning Toolbox™, è possibile addestrare, valutare e fare previsioni con modelli di SVM per la classificazione e la regressione. Dalla selezione delle feature e l’ottimizzazione degli iperparametri fino alla validazione incrociata e le metriche prestazionali, MATLAB mette a disposizione degli strumenti per realizzare modelli di Support Vector Machine efficienti. Le app di Machine Learning low-code di MATLAB consentono di addestrare e valutare le SVM in modo interattivo, di generare codice C/C++ e di procedere alla distribuzione su CPU e microcontroller, senza dover scrivere codice in autonomia.

Pre-elaborazione dei dati

Per garantire risultati accurati, i dati devono essere privi di outlier e pronti all’addestramento del modello. Con MATLAB, è possibile eseguire attività di pulizia, come la gestione di valori mancanti e outlier, la normalizzazione dei dati e lo smoothing dei dati. È possibile utilizzare le attività di pre-elaborazione dei dati di Live Editor o l’app Data Cleaner per pre-elaborare i dati in modo interattivo. Queste app generano anche il codice.

MATLAB supporta vari tipi di dati come le serie storiche, i dati testuali, audio e le immagini. Dei toolbox dedicati, come Audio Toolbox™ e Signal Processing Toolbox™, forniscono funzionalità di estrazione delle feature, che consentono di misurare le feature distintive in domini diversi e di riutilizzare i calcoli intermedi.

Addestramento del modello di SVM

È possibile addestrare i propri modelli di SVM per le attività di regressione e classificazione binaria o multiclasse con le funzioni fitcsvm e fitrsvm. Per le Support Vector Machine non lineari, sono supportate varie funzioni kernel (ad es. lineare, polinomiale e RBF) oppure è possibile creare e specificare una funzione kernel personalizzata (ad es. sigmoidea).

È inoltre possibile addestrare i modelli di SVM in modo interattivo con l’app Classification Learner e l’app Regression Learner. Con queste app, è possibile eseguire il workflow completo per un modello di SVM, dall’addestramento all’ottimizzazione, senza dover scrivere codice. Le app consentono di esplorare i dati, selezionare le feature, eseguire l’addestramento automatizzato, ottimizzare gli iperparametri e valutare i risultati.

Screenshot che mostra l’accuratezza di validazione di vari modelli di SVM con matrice di confusione di validazione di dati della ionosfera modellati tramite un modello di SVM lineare.

Matrice di confusione di validazione creata con l’app Classification Learner. (Cfr. codice MATLAB.)

Le app possono generare codice C/C++ e consentono di esportare il modello di SVM, semplificando la condivisione dei risultati e l’ulteriore analisi esternamente all’app. Ad esempio, è possibile esportare il modello della Support Vector Machine dall’app Classification Learner o dall’app Regression Learner e importarlo nell’ app Experiment Manager per svolgere ulteriori attività, come la modifica dei dati di addestramento, la regolazione degli intervalli di ricerca degli iperparametri e l’esecuzione di esperimenti di addestramento personalizzati.

Esecuzione delle previsioni

Dopo aver addestrato il modello di SVM, prevedi le etichette con la funzione di previsione. È possibile simulare il modello di SVM addestrato in Simulink con i blocchi ClassificationSVM Predict o RegressionSVM Predict.

Valutazione dei risultati

È possibile valutare le prestazioni del modello di SVM in modo programmatico, usando funzioni quali confusionchart e rocmetrics oppure in modo interattivo. Usando le app di Machine Learning, è possibile confrontare le prestazioni di vari modelli in modo da trovare quello più adatto ai propri dati.

Dopo l’addestramento dei classificatori nell’app Classification Learner, è possibile confrontare i modelli in base all’accuratezza, visualizzare i risultati dei classificatori raffigurando le previsioni delle classi e verificare le prestazioni con una matrice di confusione, la curva ROC o la curva precisione-richiamo.

Analogamente, nell’app Regression Learner, è possibile confrontare i modelli sulla base delle metriche dei modelli, visualizzare i risultati della regressione in un grafico della risposta oppure raffigurando graficamente la risposta effettiva rispetto a quella prevista, quindi valutare i modelli con un grafico dei residui.

Grafico che mostra la risposta prevista della Support Vector Machine sotto forma di linea con punti di risposta veri sparsi attorno alla linea.

Grafico della risposta prevista rispetto alla risposta effettiva per un modello di regressione addestrato nell’app Regression Learner. Più i punti sono vicini alla linea, migliore è la previsione. (Cfr. codice MATLAB.)