Como preparar dados de série temporal univariada para redes de memória de longo prazo

Como preparar dados de série temporal univariada para redes de memória de longo prazo

Pode ser difícil preparar dados quando você está apenas começando com o aprendizado profundo.

Long Short-Term Memory, ou LSTM, redes neurais recorrentes esperam entrada tridimensional na biblioteca de aprendizado profundo Keras Python.

Se você tiver uma longa sequência de milhares de observações em seus dados de série temporal, deverá dividir sua série temporal em amostras e, em seguida, reformulá-la para seu modelo LSTM.

Neste tutorial, você descobrirá exatamente como preparar seus dados de série temporal univariados para um modelo LSTM em Python com Keras.

Comece seu projeto com meu novo livro Deep Learning for Time Series Forecasting, incluindo tutoriais passo a passo e a Código-fonte Python arquivos para todos os exemplos.

Vamos começar.

Como preparar dados de série temporal univariada para redes de memória de longo prazo

Como preparar dados de série temporal univariada para redes de memória de longo prazo
Foto de Miguel Mendez, alguns direitos reservados.

Como preparar dados de série temporal

Talvez a pergunta mais comum que recebo seja como preparar dados de séries temporais para o aprendizado supervisionado.

Eu escrevi algumas postagens sobre o assunto, como:

Mas essas postagens não ajudam a todos.

Recentemente recebi este e-mail:

Eu tenho duas colunas em meu arquivo de dados com 5000 linhas, a coluna 1 é o tempo (com intervalo de 1 hora) e a coluna 2 é bits / seg. E estou tentando prever bits / seg. Nesse caso, você pode me ajudar a definir a amostra, intervalo de tempo e recurso [for LSTMs]?

Existem alguns problemas aqui:

  • Os LSTMs esperam entrada 3D e pode ser um desafio entender isso pela primeira vez.
  • Os LSTMs não gostam de sequências de mais de 200-400 intervalos de tempo, portanto, os dados precisarão ser divididos em amostras.

Neste tutorial, usaremos essa pergunta como base para mostrar uma maneira de preparar dados especificamente para a rede LSTM em Keras.

Precisa de ajuda com Deep Learning for Time Series?

Faça meu curso intensivo de e-mail gratuito de 7 dias agora (com código de exemplo).

Clique para se inscrever e também obter uma versão gratuita do Ebook em PDF do curso.

Baixe o seu mini-curso GRÁTIS

1. Carregue os dados

Presumo que você saiba carregar os dados como uma série Pandas ou DataFrame.

Se não, veja estas postagens:

Aqui, simularemos o carregamento definindo um novo conjunto de dados na memória com 5.000 etapas de tempo.

Executar esta parte imprime as primeiras 5 linhas de dados e a forma dos dados carregados.

Podemos ver que temos 5.000 linhas e 2 colunas: um conjunto de dados de série temporal univariada padrão.

2. Tempo de queda

Se seus dados de série temporal forem uniformes ao longo do tempo e não houver valores ausentes, podemos descartar a coluna de tempo.

Caso contrário, você pode querer considerar a imputação dos valores ausentes, reamostrar os dados para uma nova escala de tempo ou desenvolver um modelo que possa lidar com os valores ausentes. Veja postagens como:

Aqui, deixamos cair a primeira coluna:

Agora temos uma matriz de 5.000 valores.

3. Dividir em amostras

Os LSTMs precisam processar amostras onde cada amostra é uma única série temporal.

Nesse caso, 5.000 intervalos de tempo são muito longos; Os LSTMs funcionam melhor com intervalos de tempo de 200 a 400 com base em alguns artigos que li. Portanto, precisamos dividir as 5.000 etapas de tempo em várias subseqüências mais curtas.

Escrevo mais sobre a divisão de longas sequências aqui:

Existem muitas maneiras de fazer isso e você pode querer explorar algumas, dependendo do seu problema.

Por exemplo, talvez você precise de sequências sobrepostas, talvez a não sobreposição seja boa, mas seu modelo precisa de estado entre as subseqüências e assim por diante.

Aqui, dividiremos as 5.000 etapas de tempo em 25 subseqüências de 200 etapas de tempo cada. Em vez de usar truques de NumPy ou Python, faremos isso da maneira antiga para que você possa ver o que está acontecendo.

Agora temos 25 subseqüências de 200 etapas de tempo cada.

Se você preferir fazer isso em uma linha, vá em frente. Eu adoraria ver o que você pode fazer.
Poste sua abordagem nos comentários abaixo.

4. Remodele as subseqüências

O LSTM precisa de dados com o formato de [samples, time steps and features].

Aqui, temos 25 amostras, 200 etapas de tempo por amostra e 1 recurso.

Primeiro, precisamos converter nossa lista de matrizes em uma matriz NumPy 2D de 25 x 200.

Executando esta peça, você verá:

Em seguida, podemos usar o remodelar () função para adicionar uma dimensão adicional para nosso único recurso.

E é isso.

Os dados agora podem ser usados ​​como uma entrada (X) para um modelo LSTM.

Leitura Adicional

Esta seção fornece mais recursos sobre o tópico se você deseja se aprofundar.

Postagens Relacionadas

API

Resumo

Neste tutorial, você descobriu como converter seus dados de série temporal univariados longos em um formato que pode ser usado para treinar um modelo LSTM em Python.

Esta postagem ajudou? Você tem alguma pergunta?
Deixe-me saber nos comentários abaixo.

Desenvolva modelos de aprendizado profundo para séries temporais hoje!

Aprendizado profundo para previsão de séries temporais

Desenvolva seus próprios modelos de previsão em minutos

... com apenas algumas linhas de código python

Descubra como em meu novo Ebook:
Aprendizado profundo para previsão de séries temporais

Ele fornece tutoriais de auto-estudo em tópicos como:
CNNs, LSTMs, Previsão multivariada, Previsão de várias etapas e muito mais...

Finalmente, traga um aprendizado profundo para seus projetos de previsão de séries temporais

Ignore os acadêmicos. Apenas resultados.

Veja o que há dentro

Você também pode estar interessado em