Le Support Vector Machine (SVM) sono una classe di modelli di apprendimento supervisionato utilizzati per la classificazione e l'analisi di regressione. Il concetto fondamentale alla base delle SVM è trovare l'iperpiano ottimale che separi al meglio i punti dati di classi diverse. I vettori di supporto sono elementi importanti nella definizione di questo confine decisionale. Questa risposta chiarirà il ruolo dei vettori di supporto nelle SVM, la loro identificazione durante il processo di training e fornirà una comprensione completa del loro significato.
Ruolo dei vettori di supporto nella definizione del confine decisionale
In una SVM, il confine decisionale è un iperpiano che separa le classi di punti dati. L’iperpiano ottimale è quello che massimizza il margine tra le classi. Il margine è definito come la distanza tra l'iperpiano e i punti dati più vicini di entrambe le classi. Questi punti dati più vicini sono noti come vettori di supporto. Sono fondamentali perché influenzano direttamente la posizione e l'orientamento dell'iperpiano.
1. Massimizzazione del margine: L'obiettivo principale di un SVM è massimizzare il margine tra le classi. Il margine è definito dalla distanza dai vettori di supporto più vicini. Massimizzando questo margine, la SVM mira a migliorare la capacità di generalizzazione del modello, riducendo così la probabilità di overfitting.
2. Definizione dell'iperpiano: L'equazione dell'iperpiano in uno spazio bidimensionale può essere scritta come Durante la serata,
è il vettore dei pesi,
è il vettore di input e
è il termine bias. I vettori di supporto sono i punti dati che si trovano più vicini all'iperpiano e soddisfano la condizione
Durante la serata,
è l'etichetta della classe del vettore di supporto
. Questi punti sono critici perché definiscono i parametri
e
dell'iperpiano.
3. Influenzare il confine della decisione: Se i vettori di supporto vengono spostati, la posizione dell'iperpiano cambierà. Questo perché i vettori di supporto sono i punti utilizzati per calcolare il margine. Altri punti dati che non sono vettori di supporto non influiscono direttamente sul confine decisionale.
Identificazione dei vettori di supporto durante l'allenamento
Il processo di addestramento di una SVM prevede la risoluzione di un problema di ottimizzazione quadratica con vincoli. L'obiettivo è trovare il vettore dei pesi e pregiudizio
che massimizzano il margine classificando correttamente i dati di addestramento. Questo può essere formulato come:
Questo problema di ottimizzazione può essere risolto utilizzando tecniche come l'algoritmo Sequential Minimal Optimization (SMO) o utilizzando solutori di programmazione quadratica. Durante questo processo, i vettori di supporto sono identificati come segue:
1. Moltiplicatori di Lagrange: Il problema di ottimizzazione viene spesso risolto utilizzando il metodo dei moltiplicatori di Lagrange. La forma duale del problema di ottimizzazione introduce i moltiplicatori di Lagrange per ciascun vincolo. Il duplice problema è dato da:
where è un parametro di regolarizzazione che controlla il compromesso tra la massimizzazione del margine e la minimizzazione dell'errore di classificazione.
2. Supporta l'identificazione dei vettori: I vettori di supporto sono i punti dati per i quali corrispondono i moltiplicatori di Lagrange sono diversi da zero. Questi punti si trovano al margine e soddisfano la condizione
. Il vettore dei pesi
può essere espresso in termini di vettori di supporto come:
3. Calcolo del termine di polarizzazione: Il termine bias viene calcolato utilizzando i vettori di supporto. Per qualsiasi vettore di supporto
, la distorsione può essere calcolata come:
Ciò garantisce che l'iperpiano classifichi correttamente i vettori di supporto.
Esempio
Consideriamo un semplice set di dati bidimensionale con due classi. I punti dati possono essere rappresentati come segue:
Classe 1:
Classe 2:
L'obiettivo dell'SVM è trovare l'iperpiano ottimale che separa queste due classi. Durante il processo di addestramento, l'SVM identifica i vettori di supporto, che sono i punti più vicini all'iperpiano. In questo caso, i vettori di supporto potrebbero essere dalla Classe 1 e
dalla Classe 2. Questi punti verranno utilizzati per definire l'iperpiano e calcolare il margine.
Formulazione matematica
La forma primordiale del problema di ottimizzazione SVM è:
La forma duale è:
I vettori di supporto sono identificati dai moltiplicatori di Lagrange diversi da zero . Il vettore dei pesi
è calcolato come:
Il termine pregiudiziale viene calcolato utilizzando i vettori di supporto:
Implementazione in Python
Per implementare una SVM da zero in Python, seguire questi passaggi:
1. Preparazione dei dati: carica e preelabora il set di dati.
2. Funzione del nocciolo: Definire la funzione del kernel (ad esempio, lineare, polinomiale, RBF).
3. OTTIMIZZAZIONE: Risolvi il problema di ottimizzazione doppia utilizzando un risolutore di programmazione quadratica o un algoritmo iterativo come SMO.
4. Supporta l'identificazione dei vettori: Identificare i vettori di supporto in base ai moltiplicatori di Lagrange.
5. Calcolo dell'iperpiano: Calcola il vettore del peso e termine di pregiudizio
.
6. Predizione: Utilizza l'iperpiano per classificare nuovi punti dati.
Ecco un'implementazione semplificata di una SVM lineare da zero:
python import numpy as np from cvxopt import matrix, solvers class SVM: def __init__(self, C=1.0): self.C = C self.w = None self.b = None self.support_vectors = None def fit(self, X, y): n_samples, n_features = X.shape # Calculate the Gram matrix K = np.dot(X, X.T) # Set up the parameters for the quadratic programming solver P = matrix(np.outer(y, y) * K) q = matrix(-np.ones(n_samples)) G = matrix(np.vstack((-np.eye(n_samples), np.eye(n_samples)))) h = matrix(np.hstack((np.zeros(n_samples), np.ones(n_samples) * self.C))) A = matrix(y, (1, n_samples), 'd') b = matrix(0.0) # Solve the quadratic programming problem solution = solvers.qp(P, q, G, h, A, b) alphas = np.ravel(solution['x']) # Identify the support vectors support_vector_indices = alphas > 1e-5 self.support_vectors = X[support_vector_indices] self.alphas = alphas[support_vector_indices] self.sv_y = y[support_vector_indices] # Calculate the weight vector self.w = np.sum(self.alphas[:, None] * self.sv_y[:, None] * self.support_vectors, axis=0) # Calculate the bias term self.b = np.mean(self.sv_y - np.dot(self.support_vectors, self.w)) def predict(self, X): return np.sign(np.dot(X, self.w) + self.b) # Example usage X = np.array([[1, 2], [2, 3], [3, 3], [6, 6], [7, 7], [8, 8]]) y = np.array([-1, -1, -1, 1, 1, 1]) svm = SVM(C=1.0) svm.fit(X, y) predictions = svm.predict(X) print(predictions)
In questo esempio, la classe "SVM" definisce il modello SVM e il metodo "fit" addestra il modello risolvendo il problema di ottimizzazione doppia. I vettori di supporto vengono identificati in base ai moltiplicatori di Lagrange e il vettore del peso e il termine di bias vengono calcolati di conseguenza. Il metodo "predict" viene quindi utilizzato per classificare nuovi punti dati. I vettori di supporto svolgono un ruolo fondamentale nella definizione del confine decisionale di una SVM. Sono i punti dati che si trovano più vicini all'iperpiano e ne influenzano direttamente la posizione e l'orientamento. Durante il processo di addestramento, i vettori di supporto vengono identificati attraverso l'ottimizzazione della funzione obiettivo SVM e vengono utilizzati per calcolare il vettore dei pesi e il termine di bias che definiscono l'iperpiano. Comprendere il significato dei vettori di supporto è essenziale per comprendere come le SVM raggiungono i loro obiettivi di classificazione e per implementare le SVM da zero in Python.
Altre domande e risposte recenti riguardanti Completare SVM da zero:
- Nel contesto dell'ottimizzazione SVM, qual è il significato del vettore dei pesi "w" e del bias "b" e come vengono determinati?
- Qual è lo scopo del metodo "visualize" in un'implementazione SVM e in che modo aiuta a comprendere le prestazioni del modello?
- In che modo il metodo "predict" in un'implementazione SVM determina la classificazione di un nuovo punto dati?
- Qual è l'obiettivo principale di una Support Vector Machine (SVM) nel contesto dell'apprendimento automatico?