2013-03-15 13 views
9

Sto usando libSVM. dire che i miei valori di caratteristiche sono nel seguente formato:valori di input per il ridimensionamento svm

      instance1 : f11, f12, f13, f14 
         instance2 : f21, f22, f23, f24 
         instance3 : f31, f32, f33, f34 
         instance4 : f41, f42, f43, f44 
         .............................. 
         instanceN : fN1, fN2, fN3, fN4 

Penso che ci siano due di scala può essere applicata.

  1. scala ciascun vettore di istanza in modo tale che ogni vettore abbia una media zero e una varianza dell'unità.

    ((f11, f12, f13, f14) - mean((f11, f12, f13, f14)). /std((f11, f12, f13, f14)) 
    
  2. scala ogni colonna della matrice sopra in un intervallo. per esempio [-1, 1]

Secondo miei esperimenti con kernel RBF (libSVM) ho trovato che la seconda scala (2) migliora i risultati di circa il 10%. Non ho capito il motivo per cui (2) mi dà risultati migliori.

Qualcuno potrebbe spiegarmi quale sia la ragione per applicare il ridimensionamento e perché la seconda opzione mi dà risultati migliori?

+0

Prima di provare a rispondere a questa domanda ... Ogni colonna è nello stesso intervallo? ad esempio, fn1 e fnm sono [0,100]? – Pedrom

+0

no potrebbe essere qualsiasi intervallo. per esempio la prima colonna rappresenta l'età e la seconda rappresenta lo stipendio, ecc. – user570593

+0

Bene a seconda di come calcoli la media e la deviazione standard, potrebbero essere influenzati dalla più ampia gamma. D'altra parte, non penso che ci sia la garanzia che quella scala sia nell'intervallo [-1,1] che è l'intervallo numerico per RBF su libSVM – Pedrom

risposta

15

La cosa standard da fare è fare in modo che ogni dimensione (o attributo o colonna (nel proprio esempio)) abbia media zero e varianza unità.

Questo porta ogni dimensione del SVM nella stessa grandezza. Da http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf:

Il vantaggio principale di scalatura è evitare attributi maggiori numerici intervalli dominano quelli più piccoli intervalli numerici. Un altro vantaggio è quello di evitare le difficoltà numeriche durante il calcolo. Poiché i valori del kernel di solito dipendono da i prodotti interni dei vettori di caratteristiche, ad es. il kernel lineare e il polinomio ker- nel, valori di attributo grandi potrebbero causare problemi numerici. Raccomandiamo linearmente ridimensionando ogni attributo nell'intervallo [-1, + 1] o [0,1].

+1

Sì, il ridimensionamento delle colonne è il modo normale per farlo. Scalare le righe non ha molto senso: se le tue uniche due caratteristiche erano l'età (in anni) e il salario (in migliaia di dollari), allora un quindicenne guadagnava $ 15.000 e un sessantenne guadagnava $ 60.000 apparire esattamente identici! – Dougal

3

Credo che si riduca molto ai dati originali.

Se i dati originali hanno ALCUNI valori estremi per alcune colonne, a mio parere si perde una certa definizione durante il ridimensionamento lineare, ad esempio nell'intervallo [-1,1].

Supponiamo di avere una colonna in cui il 90% dei valori è compreso tra 100 e 500 e nel restante 10% i valori sono inferiori a -2000 e superiori a +2500.

Se si scala questi dati in modo lineare, allora si dovrà:

-2000 -> -1 ## <- The min in your scaled data 
+2500 -> +1 ## <- The max in your scaled data 

100 -> -0.06666666666666665 
234 -> -0.007111111111111068 
500 -> 0.11111111111111116 

si potrebbe sostenere che il discernibilità tra quello che era in origine 100 e 500 è più piccolo nei dati in scala rispetto a quello che era in i dati originali.

Alla fine, credo che tutto ciò corrisponda alle specifiche dei dati e credo che le prestazioni migliorate del 10% siano molto casuali, non vedrete una differenza di questa grandezza in ogni set di dati che provate entrambi i valori di scala metodi su

Allo stesso tempo, nella carta nel collegamento elencato nell'altra risposta, è possibile vedere chiaramente che gli autori consigliano di scalare i dati in modo lineare.

Spero che qualcuno lo trovi utile!

+0

Sì. È possibile limitare/rimuovere i valori estremi e quindi applicare alcune trasformazioni che dilatano l'intervallo di dati in cui sospetto si verifichi la maggior parte delle discriminazioni. Ho visto esempi reali in cui questo migliora molto le cose. –