Багатовимірний та багатовимірний прогноз часових рядів (RNN / LSTM) Керас


12

Я намагався зрозуміти, як представляти та формувати дані, щоб скласти багатовимірний та багатоваріантний прогноз часових рядів за допомогою Keras (або TensorFlow), але мені все ще незрозуміло, прочитавши багато публікацій блогу / навчальних посібників / документації про представлення даних у правильної форми (більшість прикладів - трохи менше)

Мій набір даних:

  • кілька міст
  • для якої я маю інформацію про скажімо температуру, рух автомобіля, вологість
  • скажімо, останні 2 роки (по одному запису на кожен день)

Що я хочу зробити: я хотів би прогнозувати для кожного міста температуру, яку я можу очікувати на наступний рік, використовуючи можливо відставання версії температури, руху автомобіля та вологості (звичайно, було б ще кілька функцій, але це просто приклад для думки).

Що мене бентежить: Якщо у мене є 2 міста, для яких я записав 3 функції за 365 днів. Як я повинен сформувати свої дані, щоб модель могла дати прогноз на 365 днів для цих двох міст (тобто 2 часових ряду температур протягом 365 днів)?

Інтуїтивно тензорна форма мала б (?, 365, 3)365 днів і три риси. Але я не впевнений, що дотримуватися першого виміру, і, що найголовніше, я був би здивований, якби це мало бути для кількості міст. Але в той же час я не маю уявлення, як вказати в моделі, що вона повинна правильно розуміти розміри.

Будь-які покажчики будуть корисні. Я досить знайомий з рештою проблеми (тобто, як ви будуєте мережу в Keras і т. Д., Оскільки я це робив для інших нейронних мереж, але більш конкретно, як найкраще кодувати послідовність для потрібного вводу.)

Так, і , мабуть, я міг би тренуватись і прогнозувати для кожного міста незалежно, але я впевнений, що всі погодиться, що, мабуть, слід дізнатися, що не має особливого значення для будь-якого міста, але це можна побачити лише якщо розглядати декілька з них, отже, чому я вважаю, що важливо закодувати це в моделі.


1
Ось приємний підручник на цю тему: tensorflow.org/beta/tutorials/text/time_series
CubeBot88

Відповіді:


13

Форма вводу для LSTM повинна бути (num_samples, num_time_steps, num_features). У вашому прикладі, комбінуючи обидва міста як вхідні дані, num_featuresбуде 2x3 = 6.

Якщо ви об'єднаєте всі свої 365 етапів часу в один зразок, то перший вимір буде 1 - один єдиний зразок! Ви також можете провести перевірку рівня безпеки, використовуючи загальну кількість точок даних. У вас є 2 міста, у кожному з 365 часових кроків та 3 функції: 2x365x3 = 2190. Це, очевидно, те саме, що 1x365x6 (як я вже говорив вище) - так що це була б можливість (Keras запустить) - але, очевидно, взагалі не навчиться узагальнювати, даючи лише один зразок.

Погляньте на це відповідне питання , на яке я нещодавно відповів. Там я трохи розмовляю про використання прокатного вікна (див. Коментарі відповіді для отримання додаткової інформації). Це дозволить придбати більше зразків, якщо вони вам знадобляться.

Якщо ви хочете навчити єдину модель з даними для обох міст як вхідних даних, то робити прогнози для обох міст на кожному етапі часу так само просто, як і визначити кінцевий Denseрівень, який видає 2 одиниці. Дані валідації / тестування повинні, звичайно, містити кордон (city1, city2).

Можливо, більш складним способом підходу до цього було б створення наборів даних на основі одного міста, потім тренування декількох підмоделей на кожне місто окремо (скажімо, на 5 шарів), потім Merge/ Concatenateїх та встановлення декількох подальших шарів зверху. Це означає, що ви поєднуєте вивчені особливості кожного міста, які, у свою чергу, поєднуються на більш високий рівень абстракції. Ось перше зображення, яке я отримав від пошукової системи , яка накреслює ідею.


Дуже дякую, що знайшли час, щоб відповісти так чітко! Зараз це має багато сенсу. Але, справді, я побоювався, що виконання першого рішення, яке ви пояснили, не дозволить узагальнити багато. Чи дійсно підхід розсувного вікна дійсно дозволить зробити багато узагальнень по містах?
Бастієн

Ласкаво просимо! Глибокі мережі завжди отримують більше даних. Мої пропозиції, що містяться вище, містять безліч параметрів - маючи лише 365 балів, ви ризикуєте перетворитись на ці міста (тобто відсутність узагальнення)! Ви можете спробувати збільшити дані - як це залежить від ваших даних. Якщо у вас було достатньо даних, ви могли б добре узагальнити - я міг би уявити результат типу Word2Vec (поширений в текстовому аналізі / NLP), де зв'язки між змінними стають інтерпретованими. Ознайомтеся з інформацією , і це для інтуїції / веселощів . Ваші результати можуть скласти карту погоди!
n1k31t4

так, має сенс, тому робота з деякими прокатними вікнами начебто хитрує "більше даних", якби я зрозумів, що ви сказали?
Бастієн

Якщо припустити, що ви прогнозуєте завтра, базуючись на останніх 100 днях, стан системи, швидше за все, не змінився настільки надзвичайно з вчорашнього дня (якщо ви робите прокатні вікна) порівняно з роком тому назад (не використовуючи прокатні вікна). Хоча технічно це створює більше зразків, ви не створюєте нових точок даних, а передбачуєте можливість дозволяти моделі зосередити увагу на менших фрагментах. Ця більш детальна деталізація дозволить вам скласти кращі (плавніші) статистичні висловлювання про результати, порівняно з пристосуванням усіх даних до одного та прогнозуванням. Ви зменшуєте невизначеність результатів.
n1k31t4

домовились! І чи не переключиться вікно не завадить клітині пам’яті взагалі навчитися залежностей від гніву?
Бастієн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.