Багатовимірний та багатовимірний прогноз часових рядів (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.