Redes neuronales: ¿Una variable caliente y abrumadora continua?

13

Tengo datos sin procesar que tienen alrededor de 20 columnas (20 características). Diez de ellos son datos continuos y 10 de ellos son categóricos. Algunos de los datos categóricos pueden tener como 50 valores diferentes (Estados de EE. UU.). Después de preprocesar los datos, las 10 columnas continuas se convierten en 10 columnas preparadas y los 10 valores categóricos se convierten en 200 variables codificadas en caliente. Me preocupa que si pongo todas estas características 200 + 10 = 210 en la red neuronal, las características 200-one-hot (las 10 columnas categóricas) dominarán por completo las 10 características continuas.

Quizás un método sería "agrupar" columnas juntas o algo así. ¿Es una preocupación válida y hay alguna forma estándar de tratar este problema?

(Estoy usando Keras, aunque no creo que importe demasiado).

usuario1367204
fuente
¿Ha considerado usar dos (o más) modelos secuenciales y luego fusionarlos? Cada modelo tiene entradas que coinciden mejor con los datos a medida que llegan (en lugar de mezclarlos como una salchicha). Los objetivos son los mismos, pero se crean dos conjuntos de datos de entrenamiento, cada uno se alimenta de forma independiente durante el ajuste. Inmediatamente después de la fusión viene su capa de salida final, de modo que la capa final toma decisiones sobre qué modelo funciona mejor para muestras particulares. De keras.io: keras.io/getting-started/sequential-model-guide
photox
Justo lo que estaba buscando. Gracias por contribuir
user1367204
Intenté esto y la val_loss del conjunto (model_1, model_2) era más alta que la val_loss de model_1 y más alta que la val_loss de model_2.
user1367204
¿Has intentado esto y has determinado que este problema realmente ocurre? ¿Qué pruebas hiciste para comprobar este punto? ¿Cuáles fueron los resultados?
Hugh Perkins el

Respuestas:

5

Puede codificar las variables categóricas con un método diferente de one-hot. Los codificadores binarios o hash pueden ser apropiados para este caso. El hash en particular es bueno porque codifica todas las categorías en una sola representación por vector de característica, por lo que ninguna domina a la otra. También puede especificar el tamaño de la representación final, por lo que puede dividir todas las variables categóricas en 10 entidades y terminar con 20 entidades numéricas (mitad continua, mitad categórica).

Ambos se implementan en https://github.com/scikit-learn-contrib/categorical-encoding , o son bastante sencillos de implementar usted mismo.

Will McGinnis
fuente
4

Puede usar la incrustación para transformar su gran cantidad de variables categóricas en un solo vector. Este vector comprimido será una representación distribuida de las características categóricas. Las entradas categóricas se transformarán en un vector relativamente pequeño de longitud N con N números reales que de alguna manera representan N características latentes que describen todas las entradas.

Considere la gran cantidad de palabras en el diccionario de inglés. Si este número es N, entonces podríamos representar cada palabra como un vector codificado en caliente de longitud N. Sin embargo, palabra a vecino puede capturar prácticamente toda esta información en un vector de longitud entre 200-300.

COOLBEANS
fuente