Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Support Vector Machine


Algoritmo supervisionato, per la classificazione e, in alcuni casi, anche per la regressione.

Support Vector Machine (SVM)

E' un algoritmo utilizzato per la classificazione e, in alcuni casi, anche per la regressione.
L'obiettivo principale di SVM è trovare un iperpiano ottimale che separi due classi di dati in uno spazio N-dimensionale.
Questo iperpiano è supportato da vettori di supporto, che sono i punti più vicini all'iperpiano e determinano il margine massimo tra le classi.

SVM è generalmente usato quando si ha un problema di classificazione binaria o multiclasse, e quando si hanno dati che possono essere separati linearmente o non linearmente.
Si tratta di un metodo supervisionato in quanto richiede un insieme di dati di addestramento con etichette di classe conosciute per apprendere il modello.

Ecco come funziona l'algoritmo SVM:

  • Classificazione lineare: Iniziamo con un esempio semplice.
    Supponiamo di avere due classi di dati e vogliamo separarle con un iperpiano.
    L'obiettivo è trovare l'iperpiano che massimizza il margine tra le classi.
    Questo è chiamato classificazione lineare.
  • Kernel trick: SVM può anche gestire la classificazione non lineare, utilizzando il cosiddetto "kernel trick".
    Questo trucco mappa implicitamente gli input in spazi delle caratteristiche ad alta dimensione, consentendo di trovare iperpiani non lineari.
  • Support Vectors: I vettori di supporto sono i punti di dati più vicini all'iperpiano.
    Rimuovendo questi punti, il margine dell'iperpiano verrebbe alterato.
  • Kernel types: SVM supporta diversi tipi di kernel, tra cui lineare, polinomiale, RBF (radial basis function) e sigmoide.

Un esempio di SVM in Python utilizzando Scikit-Learn:


# Importiamo le librerie necessarie
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# Carichiamo un dataset (ad esempio, il dataset Iris)
iris = datasets.load_iris()
X = iris.data[:, :2]  # Prendiamo solo le prime due features
y = iris.target

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

# Creiamo il modello SVM
clf = SVC(kernel='linear')
clf.fit(X_train, y_train)

# Facciamo previsioni sul test set
y_pred = clf.predict(X_test)

# Calcoliamo l'accuratezza del modello
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuratezza del modello: {accuracy:.2f}")

# Visualizziamo i risultati
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Support Vector Machine')
plt.show()

 

In questo esempio, stiamo utilizzando il dataset Iris e creando un modello SVM con un kernel lineare.
Stiamo quindi facendo previsioni sul test set e calcolando l'accuratezza del modello. Infine, mostriamo i risultati con Matplotlib.

L'accuratezza del modello dipenderà dal dataset specifico e dalle sue caratteristiche.