Al fin luego de mucho luchar ya encontramos la solución de este conflicto que muchos usuarios de nuestra web presentan. Si quieres compartir algún detalle no dudes en compartir tu información.
Solución:
Hay una variedad de preprocesamiento que se pueden observar al tratar con entradas de varios rangos en general (como normalización, etc.). Una representación atractiva es sin duda una buena forma de representar categorías.
Las incrustaciones se utilizan cuando hay demasiados elementos de categoría, lo que hace que una codificación activa sea muy grande. Proporcionan una representación vectorial (potencialmente entrenable) que codifica una entrada determinada. Puedes leer más sobre ellos en el siguiente enlace. El uso de incrustaciones es muy común en PNL.
https://towardsdatascience.com/deep-learning-4-embedding-layers-f9a02d55ac12
Aparte de eso, podría aprovechar el hecho de que el modelado de Keras admite múltiples capas de entrada.
Para su caso específico, aquí hay un ejemplo inventado que podría ayudarlo a comenzar. Nuevamente, agregué algunas capas ocultas densas solo para demostrar el punto. Debería ser auto explicativo
X1 = rands
X2 = df_days_onehot
Y = np.random.random(7)
float_input = Input(shape=(1, ))
one_hot_input = Input(shape=(7,) )
first_dense = Dense(3)(float_input)
second_dense = Dense(50)(one_hot_input)
merge_one = concatenate([first_dense, second_dense])
dense_inner = Dense(10)(merge_one)
dense_output = Dense(1)(dense_inner)
model = Model(inputs=[float_input, one_hot_input], outputs=dense_output)
model.compile(loss='mean_squared_error',
optimizer='adam',
metrics=['accuracy'])
model.summary()
model.fit([X1,X2], Y, epochs=2)
Otra forma (probablemente más elegante) es condicionar las variables categóricas (cuyo valor no cambia con el tiempo).
Tomemos un ejemplo con datos meteorológicos de dos ciudades diferentes: París y San Francisco. Desea predecir la próxima temperatura en función de los datos históricos. Pero al mismo tiempo, espera que el clima cambie según la ciudad. Tu también puedes:
-
Combine las características auxiliares con los datos de la serie temporal (lo que sugirió aquí).
-
Concatene las características auxiliares con la salida de la capa RNN. Es una especie de ajuste posterior a RNN ya que la capa RNN no verá esta información auxiliar.
-
O simplemente inicialice los estados RNN con una representación aprendida de la condición (por ejemplo, París o San Francisco).
Escribí una biblioteca para condicionar las entradas auxiliares. Abstrae toda la complejidad y ha sido diseñado para ser lo más fácil de usar posible:
https://github.com/philipperemy/cond_rnn/
¡Espero eso ayude!
Puedes añadir valor a nuestra información cooperando tu veteranía en las interpretaciones.