Il metodo "predict" in una Support Vector Machine (SVM) è un componente fondamentale che consente al modello di classificare nuovi punti dati dopo che è stato addestrato. Comprendere come funziona questo metodo richiede un esame dettagliato dei principi alla base dell'SVM, della formulazione matematica e dei dettagli di implementazione.
Principio base della SVM
Le Support Vector Machines sono modelli di apprendimento supervisionati utilizzati per attività di classificazione e regressione. L'obiettivo primario di una SVM è trovare l'iperpiano ottimale che separa i punti dati di diverse classi con il margine massimo. Questo iperpiano è definito in uno spazio ad alta dimensionalità e il modello SVM mira a massimizzare la distanza tra i punti più vicini delle classi, noti come vettori di supporto, e l'iperpiano.
Formulazione matematica
Il modello SVM può essere rappresentato matematicamente come segue:
1. Equazione dell'iperpiano:
where è il vettore dei pesi,
è il vettore delle caratteristiche di input e
è il termine bias.
2. Funzione di decisione:
La funzione decisionale per la classificazione è data da:
Questa funzione determina la classe del punto dati di input . Se il risultato è positivo, il punto dati viene classificato in una classe (ad esempio, +1) e, se negativo, viene classificato nell'altra classe (ad esempio, -1).
Addestrare l'SVM
Durante la fase di training, l'algoritmo SVM risolve un problema di ottimizzazione convessa per trovare i valori ottimali di che a
. L’obiettivo è minimizzare la seguente funzione di costo:
soggetti ai vincoli:
where sono variabili slack che consentono alcune classificazioni errate nel caso di dati non linearmente separabili, e
è un parametro di regolarizzazione che controlla il compromesso tra la massimizzazione del margine e la minimizzazione dell'errore di classificazione.
Trucco del nocciolo
Per i dati non linearmente separabili, le SVM utilizzano il trucco del kernel per mappare le caratteristiche di input in uno spazio di dimensione superiore dove un iperpiano lineare può separare i dati. I kernel comuni includono il kernel polinomiale, il kernel con funzione di base radiale (RBF) e il kernel sigmoideo. La funzione del kernel calcola il prodotto interno nello spazio delle caratteristiche trasformato senza eseguire esplicitamente la trasformazione.
Il metodo "prevedere".
Una volta addestrato il modello SVM, il metodo "predict" viene utilizzato per classificare nuovi punti dati. I passaggi coinvolti nel metodo "predict" sono i seguenti:
1. Calcola la funzione di decisione:
Per un nuovo punto dati , la funzione decisionale è calcolata come:
where sono i moltiplicatori di Lagrange ottenuti durante l'allenamento,
sono le etichette dei punti dati di addestramento,
sono i vettori di supporto, e
è la funzione del kernel.
2. Determinare l'etichetta di classe:
L'etichetta della classe del nuovo punto dati è determinata dal segno della funzione decisionale:
If , il punto dati viene classificato nella classe positiva (ad esempio, +1) e se
, viene classificato nella classe negativa (ad esempio, -1).
Esempio di implementazione
Di seguito è riportato un esempio semplificato di come il metodo "predict" potrebbe essere implementato da zero in una SVM di base utilizzando Python:
python import numpy as np class SVM: def __init__(self, kernel='linear', C=1.0): self.kernel = kernel self.C = C self.alpha = None self.support_vectors = None self.support_vector_labels = None self.b = 0 def fit(self, X, y): # Simplified training procedure to find alpha, support_vectors, and b # This is a placeholder for the actual training code pass def linear_kernel(self, x1, x2): return np.dot(x1, x2) def predict(self, X): if self.kernel == 'linear': kernel_function = self.linear_kernel else: raise ValueError("Unsupported kernel") y_pred = [] for x in X: decision_function = 0 for alpha, sv, sv_label in zip(self.alpha, self.support_vectors, self.support_vector_labels): decision_function += alpha * sv_label * kernel_function(sv, x) decision_function += self.b y_pred.append(np.sign(decision_function)) return np.array(y_pred) # Example usage svm = SVM(kernel='linear', C=1.0) # Assuming X_train and y_train are the training data and labels # svm.fit(X_train, y_train) # Assuming X_test is the new data to classify # predictions = svm.predict(X_test)
Spiegazione dettagliata dell'esempio
1. Inizializzazione:
La classe `SVM` viene inizializzata con un kernel specificato (il valore predefinito è 'linear') e un parametro di regolarizzazione .
2. Formazione (metodo `fit`):
Il metodo "fit" è un segnaposto per il codice di addestramento vero e proprio, che implicherebbe la risoluzione del problema di ottimizzazione per trovare i moltiplicatori di Lagrange , vettori di supporto e termine di bias
.
3. Funzione del nocciolo:
Il metodo `linear_kernel` calcola il prodotto interno di due vettori, che è la forma più semplice di una funzione del kernel. Per kernel più complessi, verrebbero implementati metodi aggiuntivi.
4. Previsione (metodo `predict`):
Il metodo "predict" seleziona innanzitutto la funzione kernel appropriata in base al tipo di kernel specificato. Quindi esegue l'iterazione su ogni nuovo punto dati e calcola la funzione decisionale utilizzando i vettori di supporto, i corrispondenti moltiplicatori di Lagrange e le etichette. Il segno della funzione decisionale determina l'etichetta della classe del nuovo punto dati.
Considerazioni pratiche
- Vettori di supporto:
Solo i vettori di supporto contribuiscono alla funzione decisionale. Questi sono i punti dati più vicini all'iperpiano e sono fondamentali per definire il margine.
- Parametro di regolarizzazione :
Il parametro controlla il compromesso tra il raggiungimento di un errore basso sui dati di addestramento e la massimizzazione del margine. Uno più piccolo
Il valore consente un margine più ampio con più classificazioni errate, mentre un valore più ampio
value punta a meno classificazioni errate ma a un margine più piccolo.
- Scelta del kernel:
La scelta della funzione del kernel ha un impatto significativo sulle prestazioni dell'SVM. I kernel lineari sono adatti per dati separabili linearmente, mentre i kernel non lineari come RBF vengono utilizzati per distribuzioni di dati più complesse.
- Scalabilità:
Le SVM possono richiedere un utilizzo intensivo del calcolo, soprattutto per set di dati di grandi dimensioni. La complessità della formazione è in genere a
, Dove
è il numero di campioni di addestramento. Tecniche come l'algoritmo Sequential Minimal Optimization (SMO) vengono utilizzate per migliorare l'efficienza. Il metodo "prevedere" in un'implementazione SVM è un componente critico che sfrutta il modello addestrato per classificare nuovi punti dati. Calcolando la funzione decisionale in base ai vettori di supporto, ai moltiplicatori di Lagrange corrispondenti e alla funzione del kernel, il metodo determina l'etichetta di classe di ciascun nuovo punto dati. Comprendere la formulazione matematica e i dettagli di implementazione del metodo "predict" fornisce preziose informazioni sul funzionamento interno delle SVM e sulla loro applicazione nelle attività di apprendimento automatico.
Altre domande e risposte recenti riguardanti Completare SVM da zero:
- Che ruolo giocano i vettori di supporto nel definire il confine decisionale di una SVM e come vengono identificati durante il processo di formazione?
- 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?
- Qual è l'obiettivo principale di una Support Vector Machine (SVM) nel contesto dell'apprendimento automatico?