Como recodificar variável categórica em variável numérica ao usar SVM ou Rede Neural

19

Para usar o SVM ou a Rede Neural, ele precisa transformar (codificar) variáveis ​​categóricas em variáveis ​​numéricas, o método normal nesse caso é usar 0-1 valores binários com o k-ésimo valor categórico transformado em (0,0, .. ., 1,0, ... 0) (1 está na posição k-ésima). Existem outros métodos para fazer isso, especialmente quando há um grande número de valores categóricos (por exemplo, 10000), de modo que a representação 0-1 introduza um grande número de dimensões adicionais (unidades de entrada) na Rede Neural, o que não parece muito desejado ou esperado ?

Estou perguntando sobre estratégias gerais.

user68589
fonte
Você está perguntando sobre estratégias gerais ou sobre algum problema específico?
Denis Tarasov

Respostas:

11

Na PNL, onde as palavras são tipicamente codificadas como 1-de-k, o uso de incorporação de palavras surgiu recentemente. A página da Wikipedia com suas referências é um bom começo.

xEuRnEun

Talvez você possa transferir essa ideia para a sua configuração.

bayerj
fonte
10

Os métodos 'padrão' são: codificação one-hot (que você mencionou na pergunta). Se houver muitas categorias possíveis, mas você precisar da codificação 0-1, poderá usar o truque de hash .

O outro método frequentemente usado é calcular a média da resposta por categoria: veja a imagem do comentário no kaggle .

Alleo
fonte
1

Você pode usar dummyVarsno R, a partir do caretpacote. Ele criará automaticamente colunas diferentes com base no número de níveis. Depois, você pode usá cbind-lo e anexá-lo aos dados originais. Outras opções incluem model.matrixe sparse.model.matrix.

Karan Gulati
fonte
0

Você pode tentar a codificação binária, que é mais compacta e, às vezes, supera o desempenho. Você pode implementar a incorporação categórica no Keras, por exemplo.

eafpres
fonte
0

Você pode usar a codificação de entidade , que é uma estrutura de rede mais sofisticada. Adiciona entre 1 ek-1neurônios lineares ocultos entre a entrada categórica e a primeira camada totalmente conectada. Isso tem bons resultados empíricos por trás disso.

"Incorporação de entidades de variáveis ​​categóricas" por Cheng Guo, Felix Berkhahn

Mapeamos variáveis ​​categóricas em um problema de aproximação de função para espaços euclidianos, que são os incorporamentos de entidade das variáveis ​​categóricas. O mapeamento é aprendido por uma rede neural durante o processo de treinamento supervisionado padrão. A incorporação de entidades não apenas reduz o uso de memória e acelera as redes neurais em comparação com a codificação one-hot, mas, mais importante, mapeando valores semelhantes próximos um do outro no espaço de incorporação, revela as propriedades intrínsecas das variáveis ​​categóricas. Nós o aplicamos com sucesso em uma competição recente do Kaggle e conseguimos alcançar a terceira posição com recursos relativamente simples. Demonstramos ainda neste artigo que a incorporação de entidades ajuda a rede neural a generalizar melhor quando os dados são escassos e as estatísticas são desconhecidas. Portanto, é especialmente útil para conjuntos de dados com muitos recursos de alta cardinalidade, onde outros métodos tendem a se superestimar. Também demonstramos que as incorporações obtidas a partir da rede neural treinada aumentam consideravelmente o desempenho de todos os métodos de aprendizado de máquina testados quando usados ​​como recursos de entrada. Como a incorporação de entidade define uma medida de distância para variáveis ​​categóricas, ela pode ser usada para visualizar dados categóricos e para agrupar dados.

Sycorax diz restabelecer Monica
fonte