Redes Neurais: Variável de uma quente esmagadora contínua?

13

Eu tenho dados brutos que possuem cerca de 20 colunas (20 recursos). Dez deles são dados contínuos e 10 deles são categóricos. Alguns dos dados categóricos podem ter 50 valores diferentes (Estados dos EUA). Depois que eu pré-processo os dados, as 10 colunas contínuas se tornam 10 colunas preparadas e os 10 valores categóricos se tornam como 200 variáveis ​​codificadas um a quente. Estou preocupado que, se eu colocar todos esses recursos 200 + 10 = 210 na rede neural, os recursos 200-um-quentes (as 10 colunas categóricas) dominarão totalmente os 10 recursos contínuos.

Talvez um método seja "agrupar" colunas ou algo assim. Essa é uma preocupação válida e existe alguma maneira padrão de lidar com esse problema?

(Estou usando o Keras, embora não ache que isso importe muito.)

user1367204
fonte
Você já pensou em usar dois (ou mais) modelos seqüenciais e depois mesclá-los? Cada modelo possui entradas que melhor correspondem aos dados conforme são fornecidos (em vez de esmagá-los como uma linguiça.) Os alvos são os mesmos, mas você cria dois conjuntos de dados de treinamento, cada um é alimentado independentemente durante o ajuste. Logo após a mesclagem, chega a sua camada final de saída, para que a camada final tome decisões sobre qual modelo funciona melhor para amostras específicas. De keras.io: keras.io/getting-started/sequential-model-guide
photox
É mesmo o que eu procurava. Obrigado por contribuir.
user1367204
Eu tentei isso e o valor_loss do conjunto (modelo_1, modelo_2) foi maior que o valor_loss do modelo_1 e maior que o valor_loss do modelo_2.
user1367204
você realmente tentou isso e determinou que esse problema ocorre de fato? que testes você fez para verificar este ponto? quais foram os resultados?
Hugh Perkins

Respostas:

5

Você pode codificar as variáveis ​​categóricas com um método diferente do one-hot. Codificadores binários ou de hash podem ser apropriados para este caso. Hashing em particular é bom porque você codifica todas as categorias em uma única representação por vetor de recurso, portanto, ninguém domina o outro. Você também pode especificar o tamanho da representação final, para que todas as variáveis ​​categóricas possam ser divididas em 10 recursos e acabar com 20 recursos numéricos (meio contínuo, meio categórico).

Ambos são implementados em https://github.com/scikit-learn-contrib/categorical-encoding ou bastante simples de implementar.

Will McGinnis
fonte
4

Você pode usar a incorporação para transformar seu grande número de variáveis ​​categóricas em um único vetor. Esse vetor compactado será uma representação distribuída dos recursos categóricos. As entradas categóricas serão transformadas em um vetor relativamente pequeno de comprimento N com N números reais que de alguma forma representam N recursos latentes que descrevem todas as entradas.

Considere o grande número de palavras no dicionário inglês. Se esse número for N, poderíamos representar cada palavra como um vetor de comprimento N. com um código quente. No entanto, a palavra para vec é capaz de capturar praticamente todas essas informações em um vetor de comprimento entre 200 e 300.

COOLBEANS
fonte