Prévisions de séries chronologiques multidimensionnelles et multivariées (RNN / LSTM) Keras

12

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.

Bastien
la source
1
Voici un joli tutoriel sur ce sujet: tensorflow.org/beta/tutorials/text/time_series
CubeBot88

Réponses:

13

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ée num_featuressera 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 Densecouche 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/ Concatenateeux 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.

n1k31t4
la source
Merci beaucoup d'avoir pris le temps de répondre si clairement! Cela a beaucoup de sens maintenant. Mais, en effet, ce que je craignais, c'est que faire la première solution que vous expliquiez empêcherait une grande généralisation. L'approche par fenêtre coulissante permettrait-elle vraiment une grande généralisation entre les villes?
Bastien
Vous êtes les bienvenus! Les réseaux profonds bénéficient toujours de plus de données. Mes suggestions ci-dessus contiendraient beaucoup de paramètres - avec seulement 365 points, vous courez le risque de sur-équiper ces villes (c'est-à-dire pas de généralisation)! Vous pouvez essayer des données augmentation- comment , en fonction de vos données. Si vous aviez suffisamment de données, vous pourriez bien généraliser - je pourrais imaginer un résultat de type Word2Vec (commun dans l'analyse de texte / PNL), où les relations entre les variables deviennent interprétables. Vérifiez ceci pour plus d'informations , et cela pour plus d'intuition / de plaisir . Vos résultats peuvent tracer une carte météo!
n1k31t4
oui a du sens, donc travailler sur des fenêtres déroulantes tromperait un peu "plus de données" en quelque sorte si je comprends ce que vous avez dit?
Bastien
En supposant que vous prédisiez demain sur la base des 100 derniers jours, l'état du système n'aura probablement pas changé aussi fortement depuis hier (si vous faites des fenêtres déroulantes), par rapport à il y a un an (n'utilisez pas de fenêtres roulantes). Bien qu'il crée techniquement plus d'échantillons, vous ne créez pas de nouveaux points de données - vous prévoyez plutôt de permettre au modèle de se concentrer sur de plus petits morceaux un par un. Cette granularité plus élevée vous permettra de faire de meilleures déclarations statistiques (plus fluides) sur les résultats, par rapport à ajuster toutes les données et à faire une prédiction. Vous diminuez l'incertitude des résultats.
n1k31t4
D'accord! Et la fenêtre déroulante n'empêcherait-elle pas du tout la cellule de mémoire d'apprendre les dépendances à long terme?
Bastien