Qual è l'influenza di C in SVM con kernel lineare?


134

Attualmente sto usando un SVM con un kernel lineare per classificare i miei dati. Non ci sono errori sul set di allenamento. Ho provato diversi valori per il parametro ( ). Ciò non ha modificato l'errore sul set di test.10 - 5 , , 10 2C10-5,...,102

Ora mi chiedo: è questo un errore causato dagli attacchi rubino per libsvmsto usando ( RB-libsvm ) o si tratta teoricamente spiegabile ?

Il parametro dovrebbe sempre modificare le prestazioni del classificatore?C


Solo un commento, non una risposta: qualsiasi programma che minimizzi una somma di due termini, come dovrebbe (imho) dirti quali sono i due termini alla fine, quindi che puoi vedere come si bilanciano. (Per assistenza sul calcolo dei due termini SVM da soli, prova a porre una domanda separata. Hai esaminato alcuni dei punti più classificati? Potresti pubblicare un problema simile al tuo?)|w|2+CΣξio,
denis

Risposte:


136

Il parametro C indica all'ottimizzazione SVM quanto vuoi evitare di classificare erroneamente ogni esempio di allenamento. Per valori elevati di C, l'ottimizzazione sceglierà un iperpiano a margine più piccolo se quell'iperpiano svolge un lavoro migliore nel classificare correttamente tutti i punti di addestramento. Al contrario, un valore molto piccolo di C farà sì che l'ottimizzatore cerchi un iperpiano che separa il margine più grande, anche se quell'iperpiano classifica erroneamente più punti. Per valori molto piccoli di C, dovresti ottenere esempi erroneamente classificati, spesso anche se i tuoi dati di allenamento sono separabili linearmente.


1
OK, capisco che C determina l'influenza della classificazione errata sulla funzione obiettivo. La funzione obiettivo è la somma di un termine di regolarizzazione e il tasso di classificazione errata (vedi en.wikipedia.org/wiki/Support_vector_machine#Soft_margin ). Quando cambio C, questo non ha alcun effetto sul minimo della mia funzione oggettiva. Ciò potrebbe significare che il termine di regolarizzazione è sempre molto piccolo?
alfa,

3
Suggerirei di provare un intervallo più ampio di valori C, forse 10 ^ [- 5, ..., 5] o più se l'ottimizzazione è veloce sul tuo set di dati, per vedere se ottieni qualcosa che sembra più ragionevole. Sia l'errore di addestramento che il valore del costo minimo dovrebbero cambiare con la variazione di C. Inoltre, la scala dei tuoi dati è estrema? In generale, un parametro C ottimale dovrebbe essere più grande quando si ridimensionano i dati e viceversa, quindi se si hanno valori molto piccoli per le funzionalità, assicurarsi di includere valori molto grandi per i possibili valori C. Se nessuna di queste cose aiuta, immagino che il problema sia nei collegamenti rubini
Marc Shivers,

3
cambiare l'accuratezza bilanciata da 0,5 (solo indovinando) a 0,86 non mi sembra un'influenza marginale. Sarebbe una buona idea indagare su una griglia più fine di valori per C come suggerisce Marc, ma i risultati che hai dato sembrano essere un comportamento abbastanza normale. Ci si potrebbe aspettare che l'errore ritorni di nuovo poiché C tende all'infinito a causa di un eccesso di adattamento, ma questo non sembra essere un grosso problema in questo caso. Nota che se sei veramente interessato a un errore bilanciato e il tuo set di allenamento non ha una suddivisione 50:50, potresti essere in grado di ottenere risultati migliori ...
Dikran Marsupial

2
... usando valori diversi di C per schemi appartenenti alle classi positive e negative (che è asintoticamente equivalente al ricampionamento dei dati per cambiare la proporzione di schemi appartenenti a ciascuna classe).
Dikran Marsupial,

2
Penso che sia possibile che una volta che arrivi a C = 10 ^ 0 l'SVM stia già classificando correttamente tutti i dati di allenamento e nessuno dei vettori di supporto viene associato (l'alfa è uguale a C) in quel caso, rendendo C più grande ha nessun effetto sulla soluzione.
Dikran Marsupial,

152

In un SVM stai cercando due cose: un iperpiano con il margine minimo più grande e un iperpiano che separa correttamente il maggior numero possibile di istanze. Il problema è che non sarai sempre in grado di ottenere entrambe le cose. Il parametro c determina quanto è grande il tuo desiderio per quest'ultimo. Ho disegnato un piccolo esempio di seguito per illustrare questo. A sinistra hai una c bassa che ti dà un margine minimo abbastanza grande (viola). Tuttavia, ciò richiede che trascuriamo il cerchio blu anomalo che non siamo riusciti a classificare correttamente. Sulla destra hai un alto c. Ora non trascurerai il valore anomalo e finirai quindi con un margine molto più piccolo.

inserisci qui la descrizione dell'immagine

Quindi quali di questi classificatori sono i migliori? Dipende dall'aspetto dei dati futuri che prevedi e, molto spesso, non lo sai ovviamente. Se i dati futuri si presentano così:

grande c è il migliore quindi il classificatore appreso utilizzando un valore c elevato è il migliore.

D'altra parte, se i dati futuri si presentano così:

basso c è il migliore allora il classificatore appreso usando un valore c basso è il migliore.

A seconda del set di dati, la modifica di c può o non può produrre un iperpiano diverso. Se si fa produrre un iperpiano diverso, ciò non implica che il classificatore emette diverse classi per i dati particolare che si hanno utilizzato per classificare. Weka è un buon strumento per visualizzare i dati e giocare con impostazioni diverse per un SVM. Può aiutarti a farti un'idea di come appaiono i tuoi dati e perché cambiare il valore c non cambia l'errore di classificazione. In generale, avere poche istanze di training e molti attributi semplifica la separazione lineare dei dati. Inoltre, il fatto che si stiano valutando i dati di allenamento e non i nuovi dati invisibili semplifica la separazione.

Da che tipo di dati stai cercando di imparare un modello? Quanti dati? Possiamo vederlo?


4
Non tocco i dati da più di 3 anni. È molto tridimensionale e rumoroso e non mi è permesso pubblicarlo. Alla domanda è già stata data una risposta, ma penso che la tua visualizzazione sia molto buona e intuitiva.
alfa,

eccezionale. hai spiegazioni del genere anche per il valore di Gama?
MonsterMMORPG,

2
Il parametro gamma viene utilizzato per la funzione kernel gaussiana. Le funzioni del kernel possono essere viste come un modo efficiente per trasformare le funzioni originali in un altro spazio, dove un iperpiano di separazione nel nuovo spazio delle caratteristiche non deve essere lineare nello spazio delle caratteristiche originale. Ad esempio, la posizione bidimensionale di un punto dati nello spazio delle caratteristiche originale potrebbe essere utilizzata per calcolare una nuova funzione che rappresenta la distanza di un marcatore su una mappa. Con questa nuova funzionalità, è possibile creare un classificatore non lineare (nello spazio originale) il cui confine di decisione forma un cerchio attorno al marker
Kent Munthe Caspersen,

@KentMuntheCaspersen non è la tua spiegazione di C errata? È l'opposto di ciò che dice nel libro "Introduzione all'apprendimento statistico".
diugalde,

2
@diugalde puoi citare dal libro ciò che differisce esattamente dalla mia spiegazione? Penso sempre a c come al costo della classificazione errata (facile da ricordare per c nella classificazione). In questo modo un c più alto significa un alto costo di classificazione errata, portando all'algoritmo cercando di separare perfettamente tutti i punti dati. Con i valori anomali ciò non è sempre possibile o non porta sempre a un buon risultato generale, che è una buona ragione per abbassare / introdurre c.
Kent Munthe Caspersen,

26

C è essenzialmente un parametro di regolarizzazione, che controlla il compromesso tra il raggiungimento di un errore basso sui dati di allenamento e la riduzione al minimo della norma dei pesi. È analogo al parametro della cresta nella regressione della cresta (in effetti in pratica c'è poca differenza nelle prestazioni o nella teoria tra SVM lineari e regressione della cresta, quindi generalmente uso quest'ultimo - o regressione della cresta del kernel se ci sono più attributi che osservazioni).

L'ottimizzazione corretta di C è un passo fondamentale nella migliore pratica nell'uso degli SVM, poiché la minimizzazione del rischio strutturale (il principio chiave dietro l'approccio di base) è implementata da parte attraverso l'ottimizzazione di C. Il parametro C impone un limite superiore alla norma del pesi, il che significa che esiste un insieme annidato di classi di ipotesi indicizzate da C. Man mano che aumentiamo C, aumentiamo la complessità della classe di ipotesi (se aumentiamo leggermente C, possiamo ancora formare tutti i modelli lineari che potremmo prima e anche alcuni che non potevamo prima di aumentare il limite superiore della norma ammissibile dei pesi). Quindi oltre a implementare SRM tramite la massima classificazione dei margini, viene implementato anche limitando la complessità della classe di ipotesi tramite il controllo di C.

Purtroppo la teoria per determinare come impostare C non è molto ben sviluppata al momento, quindi la maggior parte delle persone tende a usare la validazione incrociata (se fanno qualcosa).


OK, penso di aver capito il significato di C ora. :)
alfa,

2
Ma se C è un parametro di regolarizzazione, perché un C elevato aumenta il sovra-adattamento, quando in generale viene effettuata la regolarizzazione per mitigare l'eccessivo adattamento, ovvero creando un modello più generale?
user1603472,

2
C è un parametro di regolarizzazione, ma è essenzialmente associato al termine di disadattamento dei dati (la somma delle variabili lente) piuttosto che al termine di regolarizzazione (il bit di margine), quindi un valore maggiore di C significa meno regolarizzazione, piuttosto che più. In alternativa è possibile visualizzare la consueta rappresentazione del parametro di rgularizzazione come 1 / C.
Dikran Marsupial,

8

C è un parametro di regolarizzazione che controlla il compromesso tra il raggiungimento di un errore di addestramento basso e un errore di test basso che è la capacità di generalizzare il classificatore ai dati invisibili.

Considera la funzione oggettiva di un SVM lineare: min | w | ^ 2 + C∑ξ. Se la tua C è troppo grande, l'algoritmo di ottimizzazione proverà a ridurre | w | per quanto possibile, portando a un iperpiano che tenta di classificare correttamente ciascun esempio di addestramento. Ciò comporterà la perdita delle proprietà di generalizzazione del classificatore. D'altra parte, se la tua C è troppo piccola, dai alla tua funzione obiettivo una certa libertà di aumentare | w | molto, che porterà a un grande errore di allenamento.

Le immagini sottostanti potrebbero aiutarti a visualizzarlo. Classificatore SVM lineare con C = 10000000Classificatore SVM lineare con C = 0,001


Non capisco davvero le tue trame. Puoi spiegarlo?
alfa,

1
@alfa: Il mio intento per mostrare i grafici era: 1) Se C è troppo grande (diagramma 1), il tuo classificatore si adatta troppo, cioè proverà a classificare accuratamente ogni punto dei dati di allenamento. Il diagramma 1 mostra che quasi tutti i punti di allenamento sono stati classificati correttamente. 2) D'altra parte, se C è troppo minore (grafico 2), il tuo classificatore sarà in forma. Il grafico 2 mostra il classificatore under fit. Non separa i punti nelle rispettive classi. Spero che sia di aiuto.
Deerishi,

Ciò significa che i tuoi assi X e Y mostrano due diverse caratteristiche. Le etichette "lunghezza del set di dati" e "Somma dei mezzi" sono un po 'confuse?
alfa,

Sarebbe interessante vedere come la scelta giusta per C aiuta in entrambi i casi.
alfa,

2
Penso che non sia ovvio vedere che C = 10000000 è una cattiva scelta e penso che il set di dati non sia quello giusto per dimostrarlo. Forse un set di dati con solo alcuni valori anomali sul lato sbagliato dell'iperpiano di separazione sarebbe meglio?
alfa,

4

Le risposte sopra sono eccellenti. Dopo aver letto attentamente le tue domande, ho scoperto che ci sono 2 fatti importanti che potremmo trascurare.

  1. Stai usando un kernel lineare
  2. I dati di allenamento sono separabili in modo lineare, poiché "Non vi sono errori nel set di addestramento".

Dati i 2 fatti, se i valori di C cambiano in un intervallo ragionevole, l'iperpiano ottimale si sposterà casualmente di una piccola quantità all'interno del margine (il gap formato dai vettori di supporto).

Intuitivamente, supponiamo che il margine sui dati di allenamento sia piccolo e / o che non vi siano anche punti di dati di test all'interno del margine, lo spostamento dell'iperpiano ottimale all'interno del margine non influirà sull'errore di classificazione del set di test.

Tuttavia, se si imposta C = 0, SVM ignorerà gli errori e proverà a minimizzare la somma dei quadrati dei pesi (w), forse si potrebbero ottenere risultati diversi sul set di test.


2

Il parametro C viene utilizzato per controllare i valori anomali - C basso implica che stiamo permettendo più valori anomali, C elevato implica che consentiamo un minor numero di valori anomali.


1

Alto C (costo) significa che il costo della classificazione errata è aumentato. Ciò significa che un kernel flessibile diventerà più agitato per evitare osservazioni errate nella serie di addestramento.

Se il kernel deve agitarsi, il modello non si generalizza bene quando prevede nuovi dati.

Se il kernel deve essere diretto, il modello non si generalizza bene quando prevede nuovi dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.