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.
Respostas:
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.
Talvez você possa transferir essa ideia para a sua configuração.
fonte
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 .
fonte
Você pode usar
dummyVars
no R, a partir docaret
pacote. 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 incluemmodel.matrix
esparse.model.matrix
.fonte
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.
fonte
Você pode usar a codificação de entidade , que é uma estrutura de rede mais sofisticada. Adiciona entre 1 ek - 1 neurô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
fonte