Como combinar recursos de entrada categóricos e contínuos para o treinamento em redes neurais

16

Suponha que tenhamos dois tipos de recursos de entrada, categóricos e contínuos. Os dados categóricos podem ser representados como um código A quente, enquanto os dados contínuos são apenas um vetor B no espaço de dimensão N. Parece que o simples uso de concat (A, B) não é uma boa escolha, pois A, B são tipos de dados totalmente diferentes. Por exemplo, ao contrário de B, não há ordem numérica em A. Portanto, minha pergunta é como combinar esses dois tipos de dados ou existe algum método convencional para lidar com eles.

Na verdade, proponho uma estrutura ingênua, como apresentado na figura

insira a descrição da imagem aqui

Como você vê, as primeiras camadas são usadas para alterar (ou mapear) os dados A para alguma saída do meio no espaço contínuo e, em seguida, são concatenados com os dados B, que formam um novo recurso de entrada no espaço contínuo para as camadas posteriores. Gostaria de saber se é razoável ou se é apenas um jogo de "tentativa e erro". Obrigado.

JunjieChen
fonte

Respostas:

5

Existem três abordagens principais para resolver isso:

  1. Construindo dois modelos separadamente e treinando um algoritmo de conjunto que recebe a saída dos dois modelos como entrada
  2. Concatenando todos os dados em um único vetor / tensor como uma etapa de pré-processamento e, em seguida, treine uma entrada simples simples NN
  3. A arquitetura NN de entradas múltiplas que você propôs

A abordagem do conjunto é a opção mais direta e produzirá resultados decentes; no entanto, não funcionará tão bem quanto a opção que você propôs, porque a rede do conjunto recebe apenas probabilidades de classe das duas redes como entrada e, em comparação com o seu A abordagem perde relações mais complexas entre os tipos de dados.

A segunda abordagem não é, em teoria, diferente da proposta de abordagem, com a diferença de que a rede assume que a própria rede descobrirá que a entrada consiste em dois tipos de dados (pois ambos estão no mesmo vetor / tensor) ) Levará muito tempo para a rede aprender isso e você pode ficar preso em um mínimo local antes que isso aconteça.

Com base na minha experiência pessoal, a rede que você propôs é a melhor opção, e provavelmente terá o menor tempo de trem e, depois de acertar a arquitetura, será muito fácil treinar e manter (treinar novamente) a rede na produção, bem como você só precisará treinar novamente um único modelo.

Tadej Magajna
fonte
0

Eu já vinha usando a estrutura ingênua proposta por você há algum tempo. Em um problema bem estruturado e com dados suficientes, esse tipo de arquitetura funciona muito bem. No entanto, aqui estão algumas coisas que eu aprendi:

  1. Os algoritmos baseados em árvore (RF, XGB) geralmente funcionam bem com classes mistas, a menos que você tenha alguns requisitos de saída específicos ou função de perda que é mais fácil de implementar por meio de redes neurais.
  2. Se o uso da rede neural for decidido, essa arquitetura terá um desempenho melhor em comparação com outros tipos de maneiras de codificação de cadeia.
  3. Essa abordagem também funciona com dados mistos de séries temporais de entrada - muito melhor do que qualquer abordagem clássica de séries temporais.

O design principal seria a camada de concatenação e onde você deseja colocá-la na arquitetura. O uso de camadas de incorporação também oferece benefícios adicionais ao usar essas incorporações aprendidas em algumas outras tarefas / visualizações.

Esse tipo de arquitetura tem sido usado nas competições do Kaggle [1] e também é ensinado no curso Fast.ai pelo Prof. Jeremy Howard [2].

  1. https://yashuseth.blog/2018/07/22/pytorch-neural-network-for-tabular-data-with-categorical-embeddings/
  2. https://www.fast.ai/2019/01/01/24/course-v3/
Soumyajit
fonte