Многомерный и многомерный прогноз временных рядов (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их и размещение нескольких дополнительных слоев сверху. Это будет означать, что вы объединяете изученные особенности каждого города, которые в свою очередь объединяются на более высокий уровень абстракции. Вот первое изображение, которое я получил от поисковика , которое набрасывает идею.

n1k31t4
источник
Большое спасибо, что нашли время, чтобы ответить так четко! Это имеет большой смысл сейчас. Но на самом деле я боялся, что выполнение первого решения, которое вы объяснили, предотвратит много обобщений. Будет ли подход с «скользящим окном» действительно обобщать многие города?
Бастьен,
Пожалуйста! Глубокие сети всегда выигрывают от большего количества данных. Мои предложения, приведенные выше, будут содержать много параметров - всего 365 баллов, вы рискуете перенастроить эти города (т.е. не обобщать)! Вы можете попробовать увеличение данных - как , зависит от ваших данных. Если бы у вас было достаточно данных, вы могли бы хорошо обобщить - я мог бы представить результат типа Word2Vec (обычный для анализа текста / NLP), где отношения между переменными становятся интерпретируемыми. Проверьте это для информации , и это для большей интуиции / веселья . Ваши результаты могут составить карту погоды!
n1k31t4
да, имеет смысл, так что работа с несколькими «скользящими окнами» будет своего рода обманом «больше данных», если я пойму, что вы сказали?
Бастьен,
Предполагая, что вы прогнозируете завтрашний день, основываясь на последних 100 днях, состояние системы, скорее всего, не изменилось со времени вчерашнего дня (при использовании скользящих окон) по сравнению с прошлым годом (без использования скользящих окон). Хотя это технически создает больше выборок, вы не создаете новые точки данных, а скорее предсказываете, позволяя модели фокусироваться на меньших порциях по одному. Эта более высокая степень детализации позволит вам сделать более качественные (более плавные) статистические отчеты о результатах по сравнению с подбором всех данных и одним прогнозом. Вы уменьшаете неопределенность в результатах.
n1k31t4
согласовано! И разве скользящее окно вообще не помешает ячейке памяти изучать длинные зависимости ярости?
Бастьен,