J'ai essayé de comprendre comment représenter et façonner les données pour faire une prévision de séries chronologiques multidimentionnelles et multivariées en utilisant Keras (ou TensorFlow) mais je ne suis toujours pas très clair après avoir lu de nombreux articles de blog / tutoriels / documentation sur la façon de présenter les données dans le forme correcte (la plupart des exemples sont légèrement moins
Mon jeu de données:
- plusieurs villes
- pour lesquels j'ai des informations sur la température, la circulation automobile, l'humidité
- disons les 2 dernières années (un record pour chaque jour)
Ce que je veux faire: je voudrais prévoir pour chaque ville les températures auxquelles je peux m'attendre pour l'année prochaine en utilisant une version éventuellement décalée de la température, de la circulation automobile et de l'humidité (bien sûr, il y aurait plusieurs autres fonctionnalités mais ce n'est qu'un exemple de réflexion).
Ce qui m'embrouille: si j'ai 2 villes, pour lesquelles j'ai enregistré 3 longs métrages pendant 365 jours. Comment dois-je façonner mon entrée afin que le modèle puisse produire une prévision pour 365 jours pour ces deux villes (c.-à-d. 2 séries chronologiques de températures pendant 365 jours)?
Intuitivement, la forme du tenseur serait (?, 365, 3)
de 365 jours et 3 caractéristiques. Mais je ne sais pas quoi garder dans la première dimension et, surtout, je serais surpris si cela devait être pour le nombre de villes. Mais en même temps, je n'ai aucune idée de comment spécifier dans le modèle qu'il doit comprendre correctement les dimensions.
Tout pointeur sera utile. Je suis assez familier avec le reste du problème (c'est-à-dire comment vous construisez un réseau dans Keras, etc., car je l'ai fait pour d'autres réseaux de neurones, mais plus précisément la meilleure façon de coder la séquence pour l'entrée souhaitée.)
Oh et aussi , je suppose que je pourrais m'entraîner et prédire pour chaque ville indépendamment, mais je suis sûr que tout le monde conviendra qu'il y a probablement des choses à apprendre qui ne sont pas particulières à une ville mais qui ne peuvent être vues que si l'on considère plusieurs d'entre elles, c'est pourquoi je pense qu'il est important de l'encoder dans le modèle.
Réponses:
La forme d'entrée pour un LSTM doit être
(num_samples, num_time_steps, num_features)
. Dans votre exemple, la combinaison des deux villes en entréenum_features
sera 2x3 = 6.Si vous regroupez tous vos 365 pas de temps en un seul échantillon, la première dimension sera 1 - un seul échantillon! Vous pouvez également effectuer un contrôle d'intégrité en utilisant le nombre total de points de données. Vous avez 2 villes, chacune avec 365 pas de temps et 3 fonctionnalités: 2x365x3 = 2190. C'est évidemment la même chose que 1x365x6 (comme je l'ai dit ci-dessus) - ce serait donc une possibilité (Keras fonctionnera) - mais il n'apprendra évidemment pas du tout à généraliser, ne lui donnant qu'un échantillon.
Jetez un oeil à cette question pertinente , à laquelle j'ai récemment répondu. Là, je parle un peu de l'utilisation d'une fenêtre déroulante (consultez les commentaires de la réponse pour plus d'informations). Cela vous permettra d'acheter plus d'échantillons si vous en avez besoin.
Si vous souhaitez former un modèle unique avec des données pour les deux villes en entrée, faire des prédictions pour les deux villes à chaque pas de temps est aussi simple que de définir une
Dense
couche finale , qui génère 2 unités. Vos données de validation / test doivent alors bien sûr contenir un tuple de (city1, city2).Une façon peut-être plus sophistiquée d'aborder cela serait de créer des ensembles de données sur une seule ville, puis de former plusieurs sous-modèles sur chaque ville individuellement (disons pour 5 couches), puis
Merge
/Concatenate
eux et de mettre plusieurs couches supplémentaires sur le dessus. Cela signifie que vous combinez les caractéristiques apprises de chaque ville, qui sont à leur tour combinées à un niveau d'abstraction plus élevé. Voici la première image que j'ai obtenue d'un moteur de recherche , qui esquisse l'idée.la source