Модель LSTM просто повторяет прошлое в прогнозировании временных рядов - PullRequest
0 голосов
/ 30 мая 2018

Я хочу предсказать одну выходную переменную из девяти входных переменных.Эти данные также являются временными рядами, и цель состоит в том, чтобы предсказать выходную переменную на 2 шага вперед.

My data table looks like this

Я нормализовал все данные с использованием средней нормализации и добавил некоторые функции, поэтому теперь данныевыглядеть так:

   weekday (weekend vs weekday)      hour  (f_real - 50)*70  ACE [Mwh]  \
0                     -1.579094 -1.341627          0.032171   2.017604   
1                     -1.579094 -0.447209          0.032171  -0.543702   
2                     -1.579094  0.447209          0.037651   0.204731   
3                     -1.579094  1.341627          0.043130  -0.601538   
4                     -1.579094 -1.341627          0.021211  11.759046   
   IGCC [Mwh]  SRE [Mwh]  TertCalls [Mwh]  Imbalance [Mwh]      Time  
0    0.257560   5.377617         0.128754        -2.858935 -1.713381  
1    0.507353   4.850718         0.128754        -2.532608 -1.677292  
2    0.173518   5.042090         0.128754        -3.325708 -1.641203  
3    2.753128   1.684767         0.128754        -2.912524 -1.605114  
4    0.206732   6.506615         0.128754        -4.926271 -1.569025

и цель такова:

0    1.541263
1    1.541263
2    1.541263
3    1.541263
4    3.885717
Name: TRE [Mwh], dtype: float64

Теперь вот моя проблема.Если я передаю данные X и Y в модель LSTM в этом формате, он отлично изучает, как прогнозировать целевую переменную в течение времени.

prediction of the model on the test data without shift

Но когда я выполняю сдвиг на 2 шага с:

target = target.shift(-2)

Он просто узнает что-то одно и то же и прогнозирует цель на 2 шага позади.

prediction of the model with target shift

Обе модели представляют собой одну и ту же сеть LSTM, созданную с использованиемKeras:

model = Sequential()
model.add(LSTM(50, input_shape=(1, train_X.shape[2])))
model.add(Dense(1, activation='linear'))
model.compile(loss='mse', optimizer=Adam(lr=0.02))
model.fit(train_X, train_y, epochs=200, batch_size=train_X.shape[0]//2, verbose=2)

Есть ли способ, например, изменить функцию стоимости, чтобы помочь модели предсказать смещенную цель?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...