python - LSTM 模型只是在预测时间序列中重复过去
问题描述
我想从九个输入变量中预测一个输出变量。该数据也是一个时间序列,目标是提前 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 个时间步的目标。
两种模型都是使用 Keras 制作的相同 LSTM 网络:
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)
有什么方法可以修改成本函数以帮助模型预测转移的目标?
解决方案
推荐阅读
- python - 至少发生两次的概率?
- python - 使用 python 的 re 正则表达式从 URL 中提取域名
- ios - 如何在 Swift、iOS 中自定义价格按钮文本
- mysql - 如何使用logstash将Mysql数据迁移到elasticsearch
- node.js - 如果在循环 node.js mongodb 中找到,则没有得到响应
- python-3.x - 如何使函数返回给定字符串中每个字符的 ascii 值
- django - Django生产服务器在windows中本地测试
- react-native - TypeError: (0 , _react.useMemo) 不是函数 - react-native redux
- ios - 设备断开一段时间后无法获得特征
- javascript - 如何使用 Joi 验证一个字符串不等于另一个(黑名单)?