Keras LSTM预测时间序列被压缩和偏移

发布于 2021-01-29 17:41:36

我想在假期中获得有关Keras的经验,我想我将从股票数据时间序列预测的教科书示例开始。因此,根据过去48小时的平均价格变化(自上次以来的百分比),我想做的是,预测接下来一小时的平均价格变化是多少。

但是,当根据测试集(甚至训练集)进行验证时,预测序列的振幅会逐渐减小,有时会偏移为始终为正或始终为负,即偏离0%变化,即I认为这种事情是正确的。

我提出了以下最小示例来说明问题:

df = pandas.DataFrame.from_csv('test-data-01.csv', header=0)
df['pct'] = df.value.pct_change(periods=1)

seq_len=48
vals = df.pct.values[1:] # First pct change is NaN, skip it
sequences = []
for i in range(0, len(vals) - seq_len):
    sx = vals[i:i+seq_len].reshape(seq_len, 1)
    sy = vals[i+seq_len]
    sequences.append((sx, sy))

row = -24
trainSeqs = sequences[:row]
testSeqs = sequences[row:]

trainX = np.array([i[0] for i in trainSeqs])
trainy = np.array([i[1] for i in trainSeqs])

model = Sequential()
model.add(LSTM(25, batch_input_shape=(1, seq_len, 1)))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')
model.fit(trainX, trainy, epochs=1, batch_size=1, verbose=1, shuffle=True)

pred = []
for s in trainSeqs:
    pred.append(model.predict(s[0].reshape(1, seq_len, 1)))
pred = np.array(pred).flatten()

plot(pred)
plot([i[1] for i in trainSeqs])
axis([2500, 2550,-0.03, 0.03])

如您所见,我选择了最后48小时,然后下一步进入元组,然后前进1小时,重复此过程,从而创建了训练和测试序列。该模型是一个非常简单的1 LSTM和1个致密层。

我本来希望各个预测点的图与训练序列的图非常好地重叠(毕竟这是它们在其上训练的相同集合),并且测试序列的匹配程度也很高。但是我在 训练数据
上得到以下结果:

  • 橙色:真实数据
  • 蓝色:预测数据

知道会发生什么吗?我误会了吗?

更新 :为了更好地显示移位和压缩的含义,我还通过将预测值移回以匹配实际数据并乘以匹配振幅来绘制预测值。

plot(pred*12-0.03)
plot([i[1] for i in trainSeqs])
axis([2500, 2550,-0.03, 0.03])

如您所见,预测非常适合真实数据,只是以某种方式被压缩和偏移,我不知道为什么。

关注者
0
被浏览
161
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我认为您是过拟合的 ,因为数据的维数为1,而对于这样的低维数据集,具有25个单位的LSTM似乎相当复杂。这是我会尝试的事情列表:

    • 减小LSTM尺寸。
    • 添加某种形式的正则化以对抗过度拟合。例如,辍学可能是一个不错的选择。
    • 训练更多的时代或改变学习率。该模型可能需要更多的时期或更大的更新才能找到适当的参数。

    更新。 让我总结一下我们在评论部分中讨论的内容。

    只是为了澄清起见,第一个图未显示验证集的预测序列,而是训练集。因此,我的第一个 过拟合
    解释可能是不准确的。我认为应该问一个适当的问题:实际上有可能从这样一个低维数据集中预测未来价格的变化吗?机器学习算法并不是神奇的:只有存在的情况下,它们才会在数据中找到模式。

    如果仅 过去的 价格变化确实不能充分说明 未来的 价格变化,则:

    • 您的模型将学习预测价格变化的平均值(可能约为0),因为在没有信息功能的情况下,该值会产生最低的损失。
    • 由于时间步t + 1的价格变化与时间步t的价格变化略相关,所以预测可能看起来有些“偏移”(但是,最接近0的预测是最安全的选择)。作为专家,我确​​实可以观察到唯一的模式(即,时间步t + 1的值有时类似于时间步t的值)。

    如果通常在时间步t和t + 1处的值恰好具有更高的相关性,那么我认为该模型将对此相关性更有信心,并且预测幅度将更大。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看