He estado tratando de entender cómo representar y dar forma a los datos para hacer una predicción de series de tiempo multidimensional y multivariante usando Keras (o TensorFlow), pero todavía no estoy muy claro después de leer muchas publicaciones / tutoriales / documentación del blog sobre cómo presentar los datos en el forma correcta (la mayoría de los ejemplos son un poco menos
Mi conjunto de datos:
- varias ciudades
- para lo cual tengo información sobre decir temperatura, tráfico de vehículos, humedad
- por ejemplo los últimos 2 años (un registro por cada día)
Lo que quiero hacer: me gustaría pronosticar para cada ciudad las temperaturas que puedo esperar para el próximo año utilizando una versión posiblemente retrasada de la temperatura, el tráfico de automóviles y la humedad (por supuesto, habría varias características más, pero esto es solo un ejemplo para el pensamiento).
De qué estoy confundido: si tengo 2 ciudades, para las cuales grabé 3 funciones durante 365 días. ¿Cómo debo configurar mi entrada para que el modelo pueda generar un pronóstico para 365 días para estas dos ciudades (es decir, 2 series temporales de temperaturas durante 365 días)?
Intuitivamente, la forma del tensor sería (?, 365, 3)
por 365 días y 3 características. Pero no estoy seguro de qué incluir en la primera dimensión y, lo más importante, me sorprendería si tuviera que ser por la cantidad de ciudades. Pero al mismo tiempo, no tengo idea de cómo especificar en el modelo que tiene que entender las dimensiones correctamente.
Cualquier puntero será útil. Estoy bastante familiarizado con el resto del problema (es decir, cómo se construye una red en Keras, etc., ya que lo he hecho para otras redes neuronales, pero más específicamente, cómo codificar mejor la secuencia para la entrada deseada).
Ah, y también , creo que podría entrenar y predecir para cada ciudad de forma independiente, pero estoy seguro de que todos estarán de acuerdo en que probablemente haya cosas que aprender que no son particulares de ninguna ciudad, pero que solo se pueden ver si se consideran varias de ellas, por eso creo que es importante codificarlo en el modelo.
Respuestas:
La forma de entrada para un LSTM debe ser
(num_samples, num_time_steps, num_features)
. En su caso de ejemplo, combinar ambas ciudades como entradanum_features
será 2x3 = 6.Si agrupa todos sus pasos de 365 tiempos en una muestra, la primera dimensión será 1: ¡una sola muestra! También puede hacer una verificación de cordura utilizando el número total de puntos de datos. Tiene 2 ciudades, cada una con 365 pasos de tiempo y 3 características: 2x365x3 = 2190. Obviamente, esto es lo mismo que 1x365x6 (como dije anteriormente), por lo que sería una posibilidad (Keras se ejecutará), pero obviamente no aprenderá a generalizar en absoluto, solo dándole una muestra.
Eche un vistazo a esta pregunta relevante , que respondí recientemente. Allí hablo un poco sobre el uso de una ventana móvil (verifique los comentarios de la respuesta para obtener más información). Eso le comprará más muestras si las necesita.
Si desea entrenar un solo modelo con datos para ambas ciudades como entrada, hacer predicciones para ambas ciudades en cada paso de tiempo es tan simple como definir una
Dense
capa final , que genera 2 unidades. Sus datos de validación / prueba deben, por supuesto, contener una tupla de (city1, city2).Una forma quizás más sofisticada de abordar esto sería crear conjuntos de datos en una sola ciudad, luego entrenar varios submodelos en cada ciudad individualmente (por ejemplo, para 5 capas), luego
Merge
/Concatenate
ellos y colocar varias capas adicionales en la parte superior. Esto significará que está combinando las características aprendidas de cada ciudad, que a su vez se están combinando a un nivel más alto de abstracción. Aquí está la primera imagen que obtuve de un motor de búsqueda , que esboza la idea.fuente