LSTM многомерное прогнозирование нескольких функций
Я новичок в этих нейронных сетях и LSTM. Я надеюсь, что получу от вас руководство, и я буду благодарен вам.
У меня есть набор исторических данных о биткойнах за 2 года и набор данных о настроениях в биткойнах с интервалом в один час. Моя цель - предсказать будущий график на следующие 60 часов, используя LSTM.
Я видел некоторые статьи о прогнозировании многомерных временных рядов. Но во всех из них для предсказания берут только один признак. Они предсказывают только цену одного предстоящего дня и . Таким образом, чтобы предсказать данные за следующие 2 месяца, я должен предсказать все функции. Чтобы я мог использовать прогнозируемые данные в качестве входных данных для следующего прогноза и так далее, чтобы прогнозировать следующие 60 дней. Может ли кто-нибудь помочь мне понять, как я могу сделать такой прогноз?
Изменить: набор данных выглядит так:
timestamp,close,sentiment
2020-05-01_00,8842.85,0.21
2020-05-01_01,8824.43,0.2
2020-05-01_02,8745.91,0.2
2020-05-01_03,8639.12,0.19
2020-05-01_04,8625.69,0.2
И я хотел бы использовать tensorflow в качестве бэкэнда. На данный момент я не написал код для построения модели, так как я должен знать, что делать, прежде чем начать кодирование.
Идея состоит в том, чтобы предоставить 100 или 150 строк данных в качестве входных данных для модели, а затем составить прогноз на следующие 60 часов, задав прогноз модели в качестве входных данных для следующего прогноза.
1 ответ
Было бы полезно, если бы вы поделились некоторым кодом того, как вы строите свою модель и как выглядят ваши данные. Как кодируются ваши данные о настроениях и какую структуру вы используете (tensorflow, pytorch и т. д.)? Я в основном знаком с Tensorflow, поэтому я укажу вам в этом направлении.
В общем, может быть полезно использовать входной слой , но LSTM ожидают 3D-тензор
[пакет, временные метки, функция].
Возможно, вы захотите рассмотреть непоследовательную архитектуру модели с использованием функциональных API . Если бы вы пошли по этому пути, у вас могло бы быть 2 отдельных входа. Один из них — временной ряд цен , а другой — временной ряд настроений, каждый из которых передается в LSTM, после чего вы можете объединить/объединить их и передать в плотные слои или даже в сверточные слои.
Наконец, вы также можете заглянуть в ConvLSTM2D , который принимает тензор 5D:
[образцы, время, каналы, строки, столбцы]
#------------------ Ответ () после обновления: -----------
Посмотреть блокнот здесь
#===========Design Model Architecture:
#==== Create Input Layers:
Price_Input = tf.keras.layers.Input(shape=(60,),name='Price_Input') #Price as Input
Sent_Input = tf.keras.layers.Input(shape=(60,),name='Sentiment_Input') #Sentiment as Input
#=== Handle Reshaping as part of the Model Architecture:
P_Input_rshp = tf.keras.layers.Reshape(target_shape=(60,1),
input_shape=(60,),
name='Price_Reshape')(Price_Input) #Pass price to reshape layer
S_Input_rshp = tf.keras.layers.Reshape(target_shape=(60,1),
input_shape=(60,),
name='Sentiment_Reshape')(Sent_Input) #Pass sentiment to rehape layer
#=== Use LSTM layers for timeseries:
P_x = tf.keras.layers.LSTM(units=1,activation='tanh',name='Price_LSTM')(P_Input_rshp) #Price Focused LSTM
S_x = tf.keras.layers.LSTM(units=1,activation='tanh',name='Sentiment_LSTM')(S_Input_rshp) #Sentiment Focused LSTM
C_x = tf.keras.layers.Concatenate(name='Concat')([P_x,S_x]) #Concatinate(join) inputs from each branch
Output = tf.keras.layers.Dense(units=1,name='Dense')(C_x) #Dense layer as model output to synthesize results
#============== Greate Model Graph:
model = tf.keras.Model(inputs=[Price_Input,Sent_Input],
outputs=Output,
name='Double_LSTM_Model')