Многомерный и многомерный прогноз временных рядов (RNN / LSTM) Керас


12

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

Мой набор данных:

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

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

Что меня смущает: если у меня есть 2 города, для которых я записал 3 функции в течение 365 дней. Как мне сформировать свои данные, чтобы модель могла выводить прогноз на 365 дней для этих двух городов (т.е. 2 временных ряда температур на 365 дней)?

Интуитивно понятно, что тензорная форма будет (?, 365, 3)на 365 дней и 3 функции. Но я не уверен, что придерживаться первого измерения, и, самое главное, я был бы удивлен, если бы это было для числа городов. Но в то же время я понятия не имею, как указать в модели, что она должна правильно понимать размеры.

Любые указатели будут полезны. Я довольно хорошо знаком с остальной проблемой (то есть, как вы строите сеть в Keras и т. Д., Поскольку я сделал это для других нейронных сетей, но более конкретно, как лучше кодировать последовательность для желаемого ввода).

Да, и также , я думаю, я мог бы тренироваться и прогнозировать для каждого города независимо, но я уверен, что все согласятся, что есть вещи, которые, возможно, следует изучить, которые не характерны для какого-либо города, но это можно увидеть только при рассмотрении нескольких из них, поэтому я считаю, что важно кодировать его в модели.


1
Вот хороший учебник по этой теме: tenorflow.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.