Classificatore a margine massimo: vettori di supporto e iperpiano
Visualizzerà la massimizzazione del margine su un dataset 2D dimostrativo, individuerà i vettori di supporto e comprenderà perché il margine massimo migliori la generalizzazione.
Classificatore a margine massimo: vettori di supporto e iperpiano è una lezione Machine Learning Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Machine Learning Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Machine Learning Academy include 4 lezioni in totale.
L'idea fondamentale delle SVM
Le Support Vector Machines (SVM) sono classificatori che individuano il miglior confine di separazione tra due classi. Quando più confini possono separare le classi, quale scegliere? La risposta delle SVM è elegante: scegliere il confine che si trova il più lontano possibile da ogni esempio di addestramento. Questo confine massimamente distante è chiamato iperpiano a margine massimo e i fondamenti teorici delle SVM garantiscono che generalizzi meglio a dati non osservati rispetto a confini di separazione arbitrari.
Che cos'è un iperpiano?
In 2D, un iperpiano è una retta (una dimensione in meno rispetto allo spazio dei dati). In 3D è un piano. In generale, in uno spazio p-dimensionale è una superficie piatta di dimensione (p-1), definita dall'equazione w·x + b = 0, dove w è il vettore normale (perpendicolare alla superficie), x è il vettore delle caratteristiche di input e b è il termine di bias. I punti da un lato soddisfano w·x + b > 0 (classe positiva predetta), mentre quelli dall'altro soddisfano w·x + b < 0 (classe negativa predetta).
Margine: la distanza tra le classi
Il margine è la distanza tra il confine decisionale e gli esempi di addestramento più vicini di ciascuna classe. SVM definisce due iperpiani del margine paralleli al confine decisionale: w·x + b = +1 per il confine della classe positiva e w·x + b = -1 per il confine della classe negativa. L'ampiezza totale del margine è 2 / ||w||. Per massimizzare il margine, SVM minimizza ||w|| (equivalentemente, ||w||²/2 per comodità matematica), imponendo che tutti i punti siano classificati correttamente.
Vettori di supporto: gli esempi fondamentali
I vettori di supporto sono gli esempi di addestramento che si trovano esattamente sugli iperpiani del margine (dove w·x + b = ±1). Sono gli unici esempi che determinano la posizione e l'orientamento del confine decisionale. Tutti gli altri esempi di addestramento, cioè quelli più lontani dal confine, non hanno alcun ruolo nel definirlo. Si tratta di un'idea fondamentale: il confine decisionale di SVM è definito interamente da un piccolo sottoinsieme dei dati di addestramento, il che lo rende robusto rispetto alla maggior parte del set di addestramento.
from sklearn.svm import SVC
from sklearn.datasets import make_classification
import numpy as np
X, y = make_classification(n_samples=50, n_features=2, n_informative=2,
n_redundant=0, random_state=42)
svm = SVC(kernel='linear', C=1.0)
svm.fit(X, y)
print('Number of support vectors:', svm.n_support_)
print('Support vector indices:', svm.support_[:5])
print('Total training examples:', len(X))Addestrare un SVM lineare con scikit-learn
Utilizzi sklearn.svm.SVC con kernel='linear' per ottenere un classificatore lineare a margine massimo. Dopo l'addestramento, il punteggio della funzione decisionale per un punto corrisponde alla sua distanza con segno dal confine decisionale: è positivo per la classe 1 e negativo per la classe 0. Il metodo decision_function() restituisce questi punteggi grezzi, mentre predict() applica la soglia basata sul segno per produrre le etichette delle classi.
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# StandardScaler is essential — SVM is sensitive to feature scales
model = make_pipeline(StandardScaler(), SVC(kernel='linear', C=1.0))
model.fit(X_train, y_train)
print('Test accuracy:', model.score(X_test, y_test))Perché ridimensionare le feature prima di usare SVM
SVM calcola le distanze tra i punti e l'iperpiano utilizzando il prodotto scalare w·x. Se una feature varia da 0 a 1 e un'altra da 0 a 1.000.000, la feature con scala maggiore dominerà il calcolo della distanza, causando di fatto l'ignoramento da parte di SVM della feature con scala minore. Applichi sempre StandardScaler (o MinMaxScaler) prima di addestrare un SVM. Questo è uno degli errori più comuni dei principianti: anche un iperpiano perfetto può fallire se le feature non sono ridimensionate.
Intuizione geometrica del margine massimo
Immagini di tracciare una strada tra due file di alberi (le classi). Il centro della strada è il confine decisionale e la sua larghezza è il margine. L'obiettivo è costruire la strada più larga possibile che riesca comunque a passare tra gli alberi senza colpirne nessuno. Gli alberi più vicini alla strada sono i vettori di supporto. Una strada più larga è preferibile perché offre una maggiore tolleranza: un nuovo albero può essere collocato in qualsiasi punto all'interno della larghezza della strada e trovarsi comunque sul lato corretto del confine.
Anteprima della formulazione duale e del kernel trick
SVM può essere addestrato in due modi equivalenti: nella forma primale (ottimizzando direttamente rispetto a w e b) e nella forma duale (ottimizzando rispetto a un insieme di moltiplicatori di Lagrange, uno per ogni esempio di addestramento). La forma duale è importante perché l'ottimizzazione coinvolge solo i prodotti scalari tra gli esempi di addestramento. Sostituendo questi prodotti scalari con una funzione kernel, si esegue una mappatura implicita dei dati in uno spazio a più dimensioni senza calcolare esplicitamente le coordinate: questo è il celebre kernel trick, che rende possibili gli SVM non lineari.
Funzione decisionale e distanza dal confine
Il metodo decision_function() di SVM restituisce la distanza con segno di ogni punto dall'iperpiano decisionale. I punti con punteggi positivi elevati appartengono con elevata sicurezza alla classe positiva; punteggi negativi elevati indicano la classe negativa. I punti vicini allo zero sono prossimi al confine e rappresentano le predizioni più incerte. Monitorare la distribuzione dei punteggi della funzione decisionale su un nuovo set di dati è un utile strumento diagnostico: se la maggior parte dei punteggi si concentra vicino allo zero, il modello potrebbe non essere adatto ai dati.
from sklearn.svm import SVC
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
import numpy as np
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = make_pipeline(StandardScaler(), SVC(kernel='linear', C=1.0))
model.fit(X_train, y_train)
scores = model.decision_function(X_test)
print('Decision function range:', np.round([scores.min(), scores.max()], 3))
print('Near-boundary (|score|<1):', np.sum(np.abs(scores) < 1))Margine rigido e dati reali
La formulazione a margine massimo descritta finora è l'SVM a margine rigido, che richiede una separabilità lineare perfetta: nessun punto di addestramento può violare il margine. I dati reali sono quasi mai perfettamente separabili linearmente a causa del rumore e della sovrapposizione delle distribuzioni delle classi. Applicare un SVM a margine rigido a dati di questo tipo porta al fallimento (l'ottimizzazione non ha una soluzione ammissibile). La soluzione pratica è l'SVM a margine morbido, introdotto nella lezione successiva, che consente alcune violazioni del margine controllate da un parametro di penalizzazione C.
SVM multiclasse: uno contro uno
La formulazione di base di SVM gestisce la classificazione binaria. Per i problemi multiclasse, SVC di scikit-learn utilizza per impostazione predefinita una strategia uno contro uno: addestra k(k-1)/2 classificatori binari, uno per ogni coppia di classi, e predice la classe che ottiene il maggior numero di voti nei confronti a coppie. Per 10 classi, ciò significa 45 classificatori binari. Un'alternativa è uno contro tutti (tramite LinearSVC), che addestra k classificatori binari, ciascuno dei quali distingue una classe da tutte le altre. Uno contro uno è generalmente più accurato, ma più lento quando le classi sono numerose.
from sklearn.svm import SVC
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
X, y = load_iris(return_X_y=True) # 3 classes
model = make_pipeline(StandardScaler(), SVC(kernel='linear', decision_function_shape='ovo'))
scores = cross_val_score(model, X, y, cv=5)
print('Multi-class SVM (OVO) CV:', scores.mean().round(4))Verifica rapida
Verifichi la Sua comprensione del classificatore a margine massimo presentato in questa lezione.
Riepilogo della lezione
In questa lezione ha imparato che: SVM trova l'iperpiano a margine massimo che separa due classi, i vettori di supporto sono gli esempi fondamentali sul margine che definiscono il confine e il ridimensionamento delle feature è essenziale prima di addestrare un SVM. Nella prossima lezione analizzeremo l'SVM a margine morbido e il parametro C, che consente di controllare le violazioni del margine.
Impara Python con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Classificatore a margine massimo: vettori di supporto e iperpiano» è gratuita?
Sì — il testo completo di «Classificatore a margine massimo: vettori di supporto e iperpiano» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Machine Learning Academy, passa a CoddyKit PRO. Il corso Machine Learning Academy include 4 lezioni in totale.
Cosa imparerò in «Classificatore a margine massimo: vettori di supporto e iperpiano»?
Visualizzerà la massimizzazione del margine su un dataset 2D dimostrativo, individuerà i vettori di supporto e comprenderà perché il margine massimo migliori la generalizzazione. Eserciti Machine Learning Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Machine Learning Academy?
Non è richiesta alcuna esperienza precedente. Machine Learning Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Classificatore a margine massimo: vettori di supporto e iperpiano»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Machine Learning Academy?
Sì. Ogni lezione Machine Learning Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Classificatore a margine massimo: vettori di supporto e iperpiano
- SVM a margine morbido e parametro C
- Il kernel trick: kernel RBF, polinomiale e sigmoide
- Regolare C e gamma con una grid search