对时间序列预测的数据进行洗牌有帮助吗?

数据挖掘 时间序列 预测建模 lstm 交叉验证
2022-03-07 05:35:33

所以我正在尝试使用 LSTM 进行时间序列预测。目的是预测Y给定X使用回归。

我已经将输入数据转换为滑动窗口格式,如果我的输入数据是以下形式:

X = [x0, x1, x2,.....]
Y = [y0, y1, y2,.....]

然后我将其转换为:

Xnew = [(x0, x1, x2), (x1, x2, x3), (x2, x3, x4),...]
Y    = [         y2,           y3,           y4,...]

尽管如此,在训练我的数据后,我发现validation_loss.

由于validation_split只取最后一部分数据,我想也许我应该在训练之前尝试对数据进行随机化。但是,这样一来,时间序列会有任何意义吗?

我发现了一个类似的问题,但我显然已经尝试过建议的内容: 为预测任务打乱时间序列数据是否有效?

3个回答

由于您的模型具有“内存”,因此在这里改组数据似乎没有意义。你不是在预测yi仅从xi, 但是也xi1xi2. 如果您打乱数据并执行预测,则意味着x1,x2,x3应该给出相同的值x2,x1,x3或者x9,x5,x3,或仅以结尾的任何一系列值x3(因为目标值总是y3,不管其他x)。如果您的目标值确实取决于前面的变量,那么对数据进行洗牌会破坏这种关系。如果它不依赖于先前的值,则可以说它不是时间序列模型,因为观察的顺序无关紧要。

在 RNN 中,序列是最重要的。对洗牌非常严格,因为它会破坏顺序。

虽然我认为,如果我们可以对不同的批次系列进行洗牌会很好,这样如果批次 i 中使用了特定系列,那么下次该系列可以成为某个不同批次的一部分,比如 j。

如果您尝试,请分享您的结果。

LSTM 有记忆,所以模型看到样本的顺序很重要。从您链接的答案中:

模型的内部参数随着它看到的每个新示例而变化并持续存在。当前预测取决于上次预测。循环神经网络有记忆,所以顺序很重要。

如果您担心自己的 loss 估计不准确,可以validation_loss使用time-series cross-validation获得更稳定的估计。

如果您担心模型的性能不足,请记住超参数调整可能对这个问题很重要。无需将历史窗口的大小固定为 3;也许更大的窗口尺寸更好?其他超参数,例如隐藏状态的大小和循环层的数量,也会对性能产生很大影响。