Eu tenho tentado entender como representar e modelar dados para fazer uma previsão de séries temporais multidimensionais e multivariadas usando Keras (ou TensorFlow), mas ainda não sou muito claro depois de ler muitas postagens / tutoriais / documentação de blog sobre como apresentar os dados no forma correta (a maioria dos exemplos é um pouco menos
Meu conjunto de dados:
- várias cidades
- para as quais tenho informações sobre temperatura, tráfego de carros, umidade
- por exemplo, nos últimos 2 anos (um registro por dia)
O que eu quero fazer: eu gostaria de prever para cada cidade as temperaturas que posso esperar para o próximo ano usando uma versão possivelmente atrasada de temperatura, tráfego de carros e umidade (é claro que haveria muitos outros recursos, mas isso é apenas uma exemplo para o pensamento).
Sobre o que estou confuso: se eu tiver duas cidades, para as quais gravei três recursos por 365 dias. Como devo moldar minha entrada para que o modelo possa gerar uma previsão de 365 dias para essas duas cidades (ou seja, duas séries temporais de temperaturas por 365 dias)?
Intuitivamente, o formato do tensor seria (?, 365, 3)
de 365 dias e 3 recursos. Mas não tenho certeza do que aderir à primeira dimensão e, mais importante, ficaria surpreso se tivesse que ser pelo número de cidades. Mas, ao mesmo tempo, não tenho idéia de como especificar no modelo que ele precisa entender as dimensões corretamente.
Qualquer ponteiro será útil. Eu estou bem familiarizado com o resto do problema (ou seja, como você constrói uma rede no Keras etc., desde que eu fiz isso para outras redes neurais, mas mais especificamente como melhor codificar a sequência para a entrada desejada.)
Ah , também acho que eu poderia treinar e prever cada cidade de forma independente, mas tenho certeza de que todos concordarão que provavelmente há coisas a serem aprendidas que não são específicas de nenhuma cidade, mas que só podem ser vistas se considerarmos várias delas, Por isso, acho que é importante codificá-lo no modelo.
Respostas:
O formato de entrada para um LSTM deve ser
(num_samples, num_time_steps, num_features)
. No seu exemplo de exemplo, a combinação das duas cidades como entradanum_features
será 2x3 = 6.Se você agrupar todas as suas etapas do 365 tempo em uma amostra, a primeira dimensão será 1 - uma única amostra! Você também pode verificar a integridade usando o número total de pontos de dados. Você tem 2 cidades, cada uma com 365 intervalos de tempo e 3 recursos: 2x365x3 = 2190. Obviamente, é o mesmo que 1x365x6 (como eu disse acima) - então seria uma possibilidade (Keras será executado) - mas obviamente não aprenderá a generalizar, apenas fornecendo uma amostra.
Dê uma olhada nesta pergunta relevante , que eu respondi recentemente. Aqui falo um pouco sobre o uso de uma janela rolante (verifique os comentários da resposta para obter mais informações). Isso comprará mais amostras se você precisar delas.
Se você deseja treinar um único modelo com dados para ambas as cidades como entrada, fazer previsões para ambas as cidades a cada etapa do tempo é tão simples quanto definir uma
Dense
camada final , que gera 2 unidades. Seus dados de validação / teste devem, é claro, conter uma tupla de (cidade1, cidade2).Uma maneira talvez mais sofisticada de abordar isso seria criar conjuntos de dados em uma única cidade, treinar vários submodelos em cada cidade individualmente (digamos, 5 camadas), então
Merge
/Concatenate
eles e colocar várias camadas adicionais por cima. Isso significa que você está combinando os recursos aprendidos de cada cidade, que por sua vez estão sendo combinados para um nível mais alto de abstração. Aqui está a primeira imagem que recebi de um mecanismo de pesquisa , que esboça a idéia.fonte