Cos’è e Come Funziona una Support Vector Machine (SVM) in Python?

AI, INTELLIGENZA ARTIFICIALE

La Support Vector Machine, o SVM, è un algoritmo di apprendimento supervisionato utilizzato principalmente per problemi di classificazione, ma applicabile anche alla regressione. La caratteristica principale delle SVM è la capacità di trovare l’iperpiano che separa al meglio le diverse classi nel dataset. Immaginate di avere una lavagna e voler tracciare una linea che separa mele da arance; la SVM cerca di fare proprio questo, ma in uno spazio multi-dimensionale.

Come Funziona una SVM?

L’idea dietro una SVM è piuttosto semplice: l’algoritmo cerca l’iperpiano che massimizza il margine tra le classi. Un iperpiano è una “linea” che divide lo spazio in dimensioni superiori a due; ad esempio, in 2D è una linea, in 3D è un piano. Il margine è la distanza tra l’iperpiano e i punti più vicini di ciascuna classe. Vogliamo trovare quell’iperpiano che lascia il massimo spazio tra le classi.

Una volta trovato l’iperpiano ottimale, possiamo usare la SVM per fare previsioni su nuovi dati. Se il nuovo dato cade su un lato del piano, appartiene a una classe; se cade dall’altro, appartiene alla classe opposta. Facile, no?

Implementazione di una SVM in Python

Passiamo alla parte pratica: come implementare una SVM in Python? La libreria scikit-learn rende tutto molto facile. Ecco un piccolo esempio:

# Importiamo la libreria e il modulo SVC (Support Vector Classifier)
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# Carichiamo il dataset di iris
iris = datasets.load_iris()
X = iris.data
y = iris.target

# Dividiamo il dataset in training e test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Creiamo un modello SVM
model = SVC(kernel='linear')

# Alleniamo il modello
model.fit(X_train, y_train)

# Facciamo delle previsioni
predictions = model.predict(X_test)

# Valutiamo il modello
accuracy = accuracy_score(y_test, predictions)
print(f"Accuratezza del modello: {accuracy*100:.2f}%")
print(f"Predizioni: {predictions}")

Con poche righe di codice, abbiamo caricato un dataset, addestrato una SVM e fatto delle previsioni.

Concetti chiave: margine, iperpiani e vettori di supporto

Ora che abbiamo affrontato le basi, è arrivato il momento di parlare dei dettagli che rendono le SVM così potenti: margine, iperpiani e vettori di supporto.

Il margine è la distanza tra l’iperpiano di separazione e i punti più vicini delle classi opposte. Il nostro obiettivo è massimizzare questo margine per garantire che la separazione tra le classi sia la più netta possibile, migliorando la fiducia nelle nostre predizioni.

Gli iperpiani sono, come menzionato prima, “linee” che dividono lo spazio in dimensioni superiori a due. L’interessante è che una SVM può calcolare iperpiani anche in spazi di dimensioni elevate, grazie al kernel trick, che permette di mappare i dati in uno spazio ad alta dimensione dove trovare un iperpiano diventa più facile. I kernel più comuni sono lineare, polinomiale e Gaussiano (RBF).

I vettori di supporto sono i campioni del dataset che si trovano più vicini all’iperpiano e giocano un ruolo cruciale nella determinazione dell’iperpiano di separazione. Sono come quei compagni di squadra che fanno tutto il lavoro sporco per proteggere la porta.

Spero che questa rapida panoramica vi abbia aiutato a chiarire un po’ le idee. Continuate a sperimentare e a fare domande. Alla prossima avventura nel fantastico mondo dell’apprendimento automatico!

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form