Misturando dados contínuos e binários com SVM linear?

15

Então, eu tenho brincado com SVMs e me pergunto se isso é uma boa coisa a fazer:

Eu tenho um conjunto de recursos contínuos (0 a 1) e um conjunto de recursos categóricos que converti em variáveis ​​fictícias. Nesse caso em particular, codifico a data da medição em uma variável dummy:

Existem 3 períodos nos quais tenho dados e reservei 3 números de recursos para eles:

20: 21: 22:

Portanto, dependendo do período de origem dos dados, diferentes recursos receberão 1; os outros receberão 0.

O SVM funcionará corretamente com isso ou isso é uma coisa ruim a ser feita?

Eu uso o SVMLight e um kernel linear.

user3010273
fonte
Isso funciona bem.
Marc Claesen
O que você fez é bom o suficiente. Eu dei uma resposta um pouco detalhada aqui - quora.com/Machine-Learning/…
TenaliRaman
@TenaliRaman, por favor, não poste links para sites que exigem um login antes de poder realmente ler qualquer coisa.
Marc Claesen
@ MarcClaesen Eu repliquei a resposta abaixo.
TenaliRaman

Respostas:

8

Os SVMs manipularão variáveis ​​binárias e contínuas, desde que você faça algum pré-processamento: todos os recursos devem ser dimensionados ou normalizados. Após essa etapa, da perspectiva dos algoritmos, não importa se os recursos são contínuos ou binários: para os binários, ele vê amostras "distantes" ou muito semelhantes; para contínuo, há também os valores intermediários. O kernel não importa em relação ao tipo de variáveis.

iliasfl
fonte
1
e qual seria a melhor técnica de normalização?
Shlomi Schwartz 26/09
23

Replicando minha resposta de http://www.quora.com/Machine-Learning/What-are-good-ways-to-handle-discrete-and-continuous-inputs-together/answer/Arun-Iyer-1

  • Recursos contínuos limitados de nova escala: todas as entradas contínuas limitadas, redimensione-as para através de x = 2 x - max - min[-1,1]x=2x-max-minmax-min
  • μσx=x-μσ
  • Binarizar recursos categóricos / discretos: para todos os recursos categóricos, represente-os como vários recursos booleanos. Por exemplo, em vez de ter um recurso chamado casamento_status, tenha 3 recursos booleanos - married_status_single, married_status_married, married_status_divorced e defina adequadamente esses recursos como 1 ou -1. Como você pode ver, para cada recurso categórico, você está adicionando k recurso binário em que k é o número de valores que o recurso categórico utiliza.

Rn

Rn

TenaliRaman
fonte
Bem, este artigo é bastante interessante sobre recursos categóricos. Não é dito que a codificação one-hot é a melhor opção para recursos categóricos, é o que estou obtendo disso.
displayname
1
esta é uma excelente resposta, eu li o link no comentário @displayname e é uma comparação útil. A partir do artigo, parece que a codificação binária é a melhor (e não a quente descrita nesta resposta) e também bastante simples) No link "Binário: primeiro as categorias são codificadas como ordinais, depois esses números inteiros são convertidos em binários código, os dígitos dessa sequência binária são divididos em colunas separadas. Isso codifica os dados em menos dimensões que um quente, mas com alguma distorção das distâncias. "
Shelbypereira
O artigo fornecido por @displayname é um bom artigo, mas não deve ser considerado pelo valor de face. A primeira coisa a lembrar é que quase todos os métodos de ML funcionam com similaridade ou medida de distância. A escolha do método de codificação influencia diretamente como as distâncias ou semelhanças são medidas entre dois pontos. Uma codificação 1 quente diz que um objeto de uma categoria é semelhante apenas a si mesmo ou equivalentemente; coloca todas as categorias em igual distância entre si. No entanto, há casos em que determinadas categorias são mais próximas que outras. Nesse caso, uma codificação diferente pode ajudar.
TenaliRaman