Я пытался понять, как представлять и формировать данные для составления многомерного и многомерного прогноза временных рядов с использованием Keras (или TensorFlow), но я все еще очень неясен после прочтения многих постов / учебников / документации в блоге о том, как представлять данные в правильная форма (большинство примеров немного меньше
Мой набор данных:
- несколько городов
- для которого у меня есть информация о, скажем, температуре, автомобильном движении, влажности
- скажем, последние 2 года (одна запись на каждый день)
Что я хочу сделать: я хотел бы прогнозировать для каждого города температуры, которые я могу ожидать в следующем году, используя, возможно, запаздывающую версию температуры, автомобильного движения и влажности (конечно, было бы еще несколько функций, но это всего лишь пример для размышления).
Что меня смущает: если у меня есть 2 города, для которых я записал 3 функции в течение 365 дней. Как мне сформировать свои данные, чтобы модель могла выводить прогноз на 365 дней для этих двух городов (т.е. 2 временных ряда температур на 365 дней)?
Интуитивно понятно, что тензорная форма будет (?, 365, 3)
на 365 дней и 3 функции. Но я не уверен, что придерживаться первого измерения, и, самое главное, я был бы удивлен, если бы это было для числа городов. Но в то же время я понятия не имею, как указать в модели, что она должна правильно понимать размеры.
Любые указатели будут полезны. Я довольно хорошо знаком с остальной проблемой (то есть, как вы строите сеть в Keras и т. Д., Поскольку я сделал это для других нейронных сетей, но более конкретно, как лучше кодировать последовательность для желаемого ввода).
Да, и также , я думаю, я мог бы тренироваться и прогнозировать для каждого города независимо, но я уверен, что все согласятся, что есть вещи, которые, возможно, следует изучить, которые не характерны для какого-либо города, но это можно увидеть только при рассмотрении нескольких из них, поэтому я считаю, что важно кодировать его в модели.
Ответы:
Форма ввода для 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
их и размещение нескольких дополнительных слоев сверху. Это будет означать, что вы объединяете изученные особенности каждого города, которые в свою очередь объединяются на более высокий уровень абстракции. Вот первое изображение, которое я получил от поисковика , которое набрасывает идею.источник