Keras LSTM模型仅在一个方向上进行预测,比预测提前了一步

时间:2018-12-28 11:17:30

标签: python keras time-series lstm prediction

我对keras LSTM模型的预测有一个有趣的问题。我模型的目标是根据以下变量来预测选定外汇汇率对的高低价格变化:开盘价,最高价,最低价,收盘价和交易量。我的数据框如下所示:

data set

在训练模型之前,我对数据框应用了以下数据准备步骤:

  1. 计算以上数据框中显示的所有列从一个时间点到下一个时间点(当前-上一个)/上一个的百分比变化。
  2. 对所有列中的每一列应用零均值归一化。
  3. 使用MinMaxScaler在[-1,1]之间的每一列中转换数据。
  4. 当我想训练LSTM模型时,我还对数据框应用了回溯窗口(请参见下面的代码)。

    df_all_lookback_x = {} for i in range(0,window_size+1): if(i==0): df_all_lookback_x = df_x else: df_all_lookback_x = pd.concat([df_x.shift(i),df_all_lookback_x], axis=1)

然后按如下所示训练模型本身:

model = Sequential()
model.add(LSTM(100, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dropout(0.2))
model.add(Dense(2, activation='tanh'))
model.compile(loss='mean_squared_error', optimizer='adam')

如果我随后使用该模型来预测列车运行和测试数据,则两者:低价和高价的百分比变化对我来说都没有意义。似乎对于预测的高百分比价格变化而言,几乎所有值都是低的(均值形成一条线),而对于低百分比价格变化,则相反。请在下面找到图片。

Prediction vs Real

Prediction vs Real

有人遇到过类似的问题,可以在这个问题上给我建议吗?

已经尝试过的东西:

  1. 使用了不同数量的特征作为模型的输入。
  2. 更改的模型参数:回溯窗口,历元,辍学率,LSTM模型大小
  3. 更改了模型的输入:删除了标准化步骤
  4. 使用了不同的损失函数,优化器
  5. 作为激活函数的tanh,线性,relu
  6. 试图仅预测一个输出变量,而不是两个变量,即高/低百分比价格变化。

0 个答案:

没有答案