Cómo ajustar los hiperparámetros de LSTM con Keras para el pronóstico de series de tiempo

Cómo ajustar los hiperparámetros de LSTM con Keras para el pronóstico de series de tiempo

Configurar redes neuronales es difícil porque no existe una buena teoría sobre cómo hacerlo.

Debe ser sistemático y explorar diferentes configuraciones, tanto desde un punto de vista dinámico como de resultados objetivos, para tratar de comprender lo que está sucediendo para un problema de modelado predictivo dado.

En este tutorial, descubrirá cómo puede explorar cómo configurar una red LSTM en un problema de predicción de series de tiempo.

Después de completar este tutorial, sabrá:

  • Cómo sintonizar e interpretar los resultados del número de épocas de entrenamiento.
  • Cómo ajustar e interpretar los resultados del tamaño de los lotes de entrenamiento.
  • Cómo sintonizar e interpretar los resultados del número de neuronas.

Pon en marcha tu proyecto con mi nuevo libro Deep Learning for Time Series Forecasting, que incluye tutoriales paso a paso y el Código fuente de Python archivos para todos los ejemplos.

Empecemos.

  • Actualizado Abr / 2019: Se actualizó el enlace al conjunto de datos.
Cómo ajustar los hiperparámetros de LSTM con Keras para el pronóstico de series de tiempo

Cómo ajustar los hiperparámetros de LSTM con Keras para el pronóstico de series de tiempo
Foto de David Saddler, algunos derechos reservados.

Descripción general del tutorial

Este tutorial se divide en 6 partes; son:

  1. Conjunto de datos de ventas de champú
  2. Arnés de prueba experimental
  3. Afinando el número de épocas
  4. Ajuste del tamaño del lote
  5. Ajuste del número de neuronas
  6. Resumen de Resultados

Ambiente

Este tutorial asume que tiene un entorno Python SciPy instalado. Puede usar Python 2 o 3 con este ejemplo.

Este tutorial asume que tienes Keras v2.0 o superior instalado con el backend de TensorFlow o Theano.

El tutorial también asume que tiene instalados scikit-learn, Pandas, NumPy y Matplotlib.

Si necesita ayuda para configurar su entorno Python, consulte esta publicación:

Conjunto de datos de ventas de champú

Este conjunto de datos describe el número mensual de ventas de champú durante un período de 3 años.

Las unidades son un recuento de ventas y hay 36 observaciones. El conjunto de datos original se atribuye a Makridakis, Wheelwright y Hyndman (1998).

El siguiente ejemplo carga y crea un gráfico del conjunto de datos cargado.

Al ejecutar el ejemplo, se carga el conjunto de datos como una serie Pandas e imprime las primeras 5 filas.

A continuación, se crea un gráfico de líneas de la serie que muestra una clara tendencia creciente.

Gráfico de línea del conjunto de datos de ventas de champú

Gráfico de línea del conjunto de datos de ventas de champú

A continuación, veremos la configuración de LSTM y el arnés de prueba utilizado en el experimento.

¿Necesita ayuda con Deep Learning para series temporales?

Realice ahora mi curso intensivo gratuito de 7 días por correo electrónico (con código de muestra).

Haga clic para registrarse y obtener también una versión gratuita en formato PDF del curso.

Descarga tu minicurso GRATIS

Arnés de prueba experimental

Esta sección describe el arnés de prueba utilizado en este tutorial.

División de datos

Dividiremos el conjunto de datos de Shampoo Sales en dos partes: una formación y un conjunto de prueba.

Los primeros dos años de datos se tomarán para el conjunto de datos de entrenamiento y el año restante de datos se utilizará para el conjunto de prueba.

Los modelos se desarrollarán utilizando el conjunto de datos de entrenamiento y harán predicciones sobre el conjunto de datos de prueba.

El pronóstico de persistencia (pronóstico ingenuo) en el conjunto de datos de prueba logra un error de 136.761 ventas de champú mensuales. Esto proporciona un límite inferior aceptable de rendimiento en el equipo de prueba.

Evaluación del modelo

Se utilizará un escenario de pronóstico continuo, también llamado validación del modelo de avance.

Cada paso de tiempo del conjunto de datos de prueba se recorrerá uno a la vez. Se utilizará un modelo para hacer un pronóstico para el paso de tiempo, luego se tomará el valor esperado real del conjunto de prueba y se pondrá a disposición del modelo para el pronóstico en el próximo paso de tiempo.

Esto imita un escenario del mundo real en el que las nuevas observaciones de ventas de champú estarían disponibles cada mes y se utilizarían en el pronóstico del mes siguiente.

Esto será simulado por la estructura del tren y los conjuntos de datos de prueba. Haremos todos los pronósticos en un solo método.

Se recopilarán todos los pronósticos del conjunto de datos de prueba y se calculará una puntuación de error para resumir la habilidad del modelo. Se utilizará el error cuadrático medio (RMSE), ya que castiga los errores grandes y da como resultado una puntuación en las mismas unidades que los datos de pronóstico, es decir, las ventas mensuales de champú.

Preparación de datos

Antes de que podamos ajustar un modelo LSTM al conjunto de datos, debemos transformar los datos.

Las siguientes tres transformaciones de datos se realizan en el conjunto de datos antes de ajustar un modelo y hacer un pronóstico.

  1. Transforme los datos de la serie temporal para que sean estacionarios. Específicamente, una diferenciación de retraso = 1 para eliminar la tendencia creciente en los datos.
  2. Transforme la serie de tiempo en un problema de aprendizaje supervisado. Específicamente, la organización de datos en patrones de entrada y salida donde la observación en el paso de tiempo anterior se usa como entrada para pronosticar la observación en el paso de tiempo actual.
  3. Transforma las observaciones para tener una escala específica. Específicamente, para cambiar la escala de los datos a valores entre -1 y 1 para cumplir con la función de activación de tangente hiperbólica predeterminada del modelo LSTM.

Estas transformaciones se invierten en los pronósticos para devolverlos a su escala original antes del cálculo y la puntuación de error.

Carreras experimentales

Cada escenario experimental se ejecutará 10 veces.

La razón de esto es que las condiciones iniciales aleatorias para una red LSTM pueden dar como resultado resultados muy diferentes cada vez que se entrena una configuración determinada.

Se utilizará un enfoque de diagnóstico para investigar las configuraciones del modelo. Aquí es donde se crearán y estudiarán los diagramas de líneas de la habilidad del modelo a lo largo del tiempo (iteraciones de entrenamiento llamadas épocas) para comprender cómo funciona una configuración determinada y cómo se puede ajustar para obtener un mejor rendimiento.

El modelo se evaluará tanto en el tren como en los conjuntos de datos de prueba al final de cada época y se guardarán las puntuaciones de RMSE.

Los puntajes de RMSE de entrenamiento y prueba al final de cada escenario se imprimen para dar una indicación del progreso.

La serie de puntuaciones de RMSE de trenes y pruebas se trazan al final de una ejecución como un gráfico de líneas. Los puntajes de los trenes son de color azul y los puntajes de las pruebas son de color naranja.

Analicemos los resultados.

Afinando el número de épocas

El primer parámetro de LSTM que veremos en el ajuste es el número de épocas de entrenamiento.

El modelo utilizará un tamaño de lote de 4 y una sola neurona. Exploraremos el efecto de entrenar esta configuración para diferentes números de épocas de entrenamiento.

Diagnóstico de 500 épocas

La lista de códigos completa para este diagnóstico se enumera a continuación.

El código está razonablemente bien comentado y debería ser fácil de seguir. Este código será la base para todos los experimentos futuros en este tutorial y solo se enumerarán los cambios realizados en cada experimento posterior.

También te puede interesar