É possível misturar dados categóricos e contínuos para SVM (Support Vector Machines)?

14

Eu tenho um conjunto de dados como

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

Eu o integro em um espaço vetorial de 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

Índices de recursos:

  • 1 é "renda"
  • 2 é "ano"
  • 3 é "use / ISENÇÃO COMERCIAL"
  • 4 é "use / CONDOMINIUM"
  • 5 é "use / ÚNICA FAMÍLIA"
  • 6 é "use / LOJA E CASA"

É bom treinar uma máquina de vetores de suporte (SVM) com uma mistura de dados contínuos (ano, renda) e dados categóricos (uso) como este?

Seamus Abshere
fonte
3
Você deve soletrar "SVM", pelo menos uma vez.
Peter Flom - Restabelece Monica
1
Certifique-se de escalar esses dados!
Patrick Caldon

Respostas:

7

Sim! Mas talvez não da maneira que você quer dizer. Em minha pesquisa, frequentemente crio recursos categóricos a partir de valores continuamente avaliados, usando um algoritmo como particionamento recursivo . Eu costumo usar essa abordagem com a implementação SVMLight de máquinas de vetores de suporte, mas também a usei com o LibSVM. Você precisará certificar-se de atribuir seus recursos categóricos particionados a um local específico em seu vetor de recursos durante o treinamento e a classificação, caso contrário, seu modelo acabará desordenadamente.

Edit: Ou seja, quando eu faço isso, atribuo os primeiros n elementos do vetor aos valores binários associados à saída do particionamento recursivo. Na modelagem de recursos binários, você apenas possui um vetor gigante de 0 e 1, para que tudo pareça o mesmo com o modelo, a menos que você indique explicitamente onde estão os diferentes recursos. Isso provavelmente é excessivamente específico, pois eu imagino que a maioria das implementações SVM faça isso por conta própria, mas, se você gosta de programar por conta própria, pode ser algo para se pensar!

Kyle.
fonte
1
obrigado Kyle, você pode ser um pouco mais específico? O que você quer dizer com "atribuir seus recursos categóricos particionados a um local específico"?
Seamus Abshere
@SeamusAbshere Sem problemas! Eu editei minha resposta para resolver isso!
Kyle.
Sinto que ouvi dizer que a libsvm faz o que você está falando automaticamente - alguma opinião?
Seamus Abshere
@SeamusAbshere Imagino que você esteja certo, mas não tenho certeza. Agora que penso nisso, não tenho certeza de como isso poderia funcionar de outra maneira.
Kyle.
Encorajado pela resposta de @ Kyle, escrevi uma biblioteca Ruby ( VectorEmbed ) que faz essa conversão (incorporação) automaticamente, tanto para dados categóricos (usando hashes Murmur32) quanto contínuos. Ele gera arquivos no formato libsvm.
Seamus Abshere 29/03