我正在建立一个外汇交易模型,我试图预测未来 5 分钟货币对的 +/- 运动。我已经有一些有希望的结果将模型调整为分类器(即,如果货币对预计增加超过某个阈值,则买入,如果预计货币对减少某个阈值,则卖出,否则不做任何事情),但是在尝试创建即使是最简单的多层感知器回归模型时,预测值的平均值也会围绕实际y值的平均值反弹(正如预期的那样,这非常接近于零)。
下面的两张图片描绘了在多个时期已经完成之后的两个不同时期之后的train预测(绿色)与实际值(蓝色)。预测均值y_train不是以某种稳定的方式向真实均值移动,而是直接越过它,并且似乎会在更多的时期内一遍又一遍地这样做。y
到目前为止,我已经尝试过:
- 使用较小的学习率
- 添加更多的时代。训练集中有近 300k 个项目,因此分类模型只能在大约 5 个 epoch 内学习,但将其增加到 50 或 100 以进行回归似乎仍然没有帮助。
- 将损失函数从 更改
mean squared error为mean absolute error - 将优化器从
Adam其他选项更改为 RMSProp(最终将为所有项目预测相同的值)、Adagrad、Adadelta、Nadam 等。 - 使用
eluorleaky relu代替relu.1此外,如果我在训练之前不添加y值,模型最终会在几个 epoch 之后为每个项目预测相同的值,这可能是同一问题的扩展。 - 输出节点上的偏差约束以使其接近零(真实
y均值)。最终,这并不重要,模型仍然远离零。 - 批量标准化
即使是这样一个非常简单的模型也会发生这种情况:
self.model = models.Sequential()
self.model.add(layers.Dense(self.num_layers, activation="relu" input_shape=(self.x_train.shape[1],)))
self.model.add(layers.Dense(1))
self.model.compile(optimizer=self.optimizer, loss='mean_squared_error', metrics=["mae"])
关于如何稳定模型的任何建议?

