Я хочу предсказать одну выходную переменную из девяти входных переменных.Эти данные также являются временными рядами, и цель состоит в том, чтобы предсказать выходную переменную на 2 шага вперед.
Я нормализовал все данные с использованием средней нормализации и добавил некоторые функции, поэтому теперь данныевыглядеть так:
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 в этом формате, он отлично изучает, как прогнозировать целевую переменную в течение времени.
Но когда я выполняю сдвиг на 2 шага с:
target = target.shift(-2)
Он просто узнает что-то одно и то же и прогнозирует цель на 2 шага позади.
Обе модели представляют собой одну и ту же сеть 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)
Есть ли способ, например, изменить функцию стоимости, чтобы помочь модели предсказать смещенную цель?