È corretto combinare dati categorici e continui per SVM (Support Vector Machines)?


14

Ho un set di dati come

+--------+------+-------------------+
| income | year |        use        |
+--------+------+-------------------+
|  46328 | 1989 | COMMERCIAL EXEMPT |
|  75469 | 1998 | CONDOMINIUM       |
|  49250 | 1950 | SINGLE FAMILY     |
|  82354 | 2001 | SINGLE FAMILY     |
|  88281 | 1985 | SHOP & HOUSE      |
+--------+------+-------------------+

L'ho incorporato in uno spazio vettoriale in formato LIBSVM

+1 1:46328 2:1989 3:1
-1 1:75469 2:1998 4:1
+1 1:49250 2:1950 5:1
-1 1:82354 2:2001 5:1
+1 1:88281 2:1985 6:1

Indici delle caratteristiche:

  • 1 è "reddito"
  • 2 è "anno"
  • 3 è "uso / ESENTE COMMERCIALE"
  • 4 è "uso / CONDOMINIO"
  • 5 è "uso / SINGOLA FAMIGLIA"
  • 6 è "uso / NEGOZIO E CASA"

È corretto addestrare una macchina vettoriale di supporto (SVM) con un mix di dati continui (anno, reddito) e categorici (uso) come questo?


3
Dovresti scrivere "SVM", almeno una volta.
Peter Flom - Ripristina Monica

1
Assicurati di ridimensionare quei dati!
Patrick Caldon,

Risposte:


7

Sì! Ma forse non nel modo in cui intendi. Nella mia ricerca creo spesso caratteristiche categoriche da quelle a valore continuo utilizzando un algoritmo come il partizionamento ricorsivo . Di solito uso questo approccio con l' implementazione SVMLight di macchine vettoriali di supporto, ma l'ho usato anche con LibSVM. Dovrai essere sicuro di aver assegnato le tue caratteristiche categoriali partizionate a un posto specifico nel tuo vettore di funzioni durante l'allenamento e la classificazione, altrimenti il ​​tuo modello finirà in modo jolly.

Modifica: Vale a dire, quando ho fatto questo, assegno i primi n elementi del vettore ai valori binari associati all'output del partizionamento ricorsivo. Nella modellazione di feature binarie, hai solo un vettore gigante di 0 e 1, quindi tutto sembra uguale al modello, a meno che tu non indichi esplicitamente dove sono diverse funzionalità. Questo è probabilmente eccessivamente specifico, poiché immagino che la maggior parte delle implementazioni SVM lo faranno da sole, ma, se ti piace programmare da solo, potrebbe essere qualcosa a cui pensare!


1
grazie Kyle, puoi essere un po 'più specifico? Cosa intendi con "assegna le tue caratteristiche categorizzate partizionate a un luogo specifico"?
Seamus Abshere il

@SeamusAbshere Nessun problema! Ho modificato la mia risposta per rispondere a questo!
Kyle.

Mi sento come se avessi sentito che libsvm fa quello di cui stai parlando automaticamente - qualche pensiero?
Seamus Abshere,

@SeamusAbshere immagino tu abbia ragione, ma non lo so per certo. Ora che ci penso, non sono sicuro di come potrebbe funzionare diversamente.
Kyle.

Incoraggiato dalla risposta di @ Kyle, ho scritto una libreria Ruby ( VectorEmbed ) che esegue questa conversione (incorporamento) automaticamente, sia per i dati categorici (usando hash Murmur32) sia per i dati continui. Produce file in formato libsvm.
Seamus Abshere il
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.