SVM per dati non bilanciati


15

Voglio provare a utilizzare Support Vector Machines (SVM) sul mio set di dati. Prima di tentare il problema, però, sono stato avvertito che le SVM non funzionano bene con dati estremamente sbilanciati. Nel mio caso, posso avere fino al 95-98% 0 e 2-5% 1.

Ho cercato di trovare risorse che parlassero dell'utilizzo di SVM su dati sparsi / sbilanciati, ma tutto ciò che ho potuto trovare sono stati "sparseSVM" (che utilizzano una piccola quantità di vettori di supporto).

Speravo che qualcuno potesse spiegare brevemente:

  1. Quanto ci si aspetta che SVM abbia a che fare con questo set di dati
  2. Quali eventuali modifiche devono essere apportate all'algoritmo SVM
  3. Quali risorse / documenti ne discutono

Risposte:


15

Molte implementazioni SVM affrontano questo problema assegnando pesi diversi alle istanze positive e negative. Sostanzialmente si pesa i campioni in modo che la somma dei pesi per i positivi sia uguale a quella dei negativi. Naturalmente, nella tua valutazione dell'SVM devi ricordare che se il 95% dei dati è negativo, è banale ottenere una precisione del 95% prevedendo sempre un risultato negativo. Quindi devi assicurarti che anche le tue metriche di valutazione siano ponderate in modo che siano bilanciate.

Nello specifico libsvm, che hai aggiunto come tag, c'è un flag che ti permette di impostare i pesi della classe ( -wcredo, ma controlla i documenti ).

Infine, per esperienza personale, posso dirti che trovo spesso che un SVM produrrà risultati molto simili con o senza la correzione del peso.


Battimi :-)
Marc Claesen,

@Bitwise Ho lo stesso problema di dati sbilanciati e ottengo una precisione del 99%. Ho usato i pesi in libsvm. Lei ha affermato che anche le metriche di valutazione devono essere ponderate. Volevo sapere come possiamo ponderare le metriche di valutazione.
Hani Goc,

1
@HaniGoc fondamentalmente vuoi calcolare separatamente l'accuratezza per ogni classe e prenderne la media. Così, per esempio, se si dispone di 10 di classe A e 90 di classe B e avete indovinato tutti i campioni ad essere di classe B, in precisione standard si avrebbe , ma nella precisione ponderata avreste 0,5 * ( 0 / 10 + 90 / 90 ) = 0,5 . 90/100=0.90.5(0/10+90/90)=0.5
Bitwise,

7

Le SVM funzionano bene su dati sparsi e sbilanciati. L'SVM ponderato per classe è progettato per gestire i dati non bilanciati assegnando penalità di classificazione errata più elevate alle istanze di addestramento della classe di minoranza.


5

Nel caso di dati sparsi come quello SVM funzionerà bene.

Come affermato da @Bitwise, non si dovrebbe usare la precisione per misurare le prestazioni dell'algoritmo.

Dovresti invece calcolare la precisione, il richiamo e il punteggio F dell'algoritmo.


Potresti per favore ampliare il tuo ragionamento? Inoltre, come faresti per misurare il punteggio F una volta completata la classificazione (sul set di test)? Grazie
Spacey,

Per misurare il FScore sul set di test, è necessario classificarlo manualmente, quindi calcolare il richiamo e la precisione utilizzando i dati manuali rispetto ai dati previsti. Cosa vorresti che espandessi, perché SVM funziona bene con i dati sparsi?
alexandrekow,

Sì, anche perché SVM funziona su dati sparsi sarebbe bello. Grazie
Spacey,

"Il semplice fatto di avere caratteristiche sparse non presenta alcun problema per SVM. Un modo per vederlo è che si potrebbe fare una rotazione casuale degli assi di coordinate, che lascerebbe il problema invariato e darebbe la stessa soluzione, ma renderebbe il dati completamente non sparsi (questo è in parte come funzionano le proiezioni casuali "( stats.stackexchange.com/questions/23470/… )
alexandrekow,
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.