时间序列的 LSTM - 使用哪个窗口大小

数据挖掘 喀拉斯 时间序列 lstm
2021-09-30 03:07:52

我有一个基于 LSTM 的网络,它输入一个 n 大小的长度序列(nx 300)并输出下一个单步(1 x 300)。

“原始”数据由几千个可变长度的半处理序列组成,其中每个步骤(显然)是 1 x 300。因此 X 是 (nx 300)。

我从这个半处理的原始序列生成训练和测试数据的方式是:

  1. 删除所有短于 K=9 的原始序列
  2. 将步幅为 1 且长度 K=9 的滑动窗口应用于保留的每个原始序列
  3. 打乱生成的数据
  4. 单独的训练/开发测试/测试数据

现在所有的训练/测试数据都是 [9 x 300]而 Y 是 [1 x 300]

生成的网络在 epoch 10 左右开始过度拟合,导致我达到1这本身不是问题,因为结果质量足够好。

如果我尝试短至 6 的序列(如在 6 x 300 中,在第一阶段被丢弃)它在 y 中为我们提供了足够的信息。

因此,问题是关于良好实践和改进网络的。

从技术上讲,我正在使用 Keras 并使用 Google Cloud ML 来执行超参数搜索。

问题是:

  1. 我应该坚持使用滑动窗口生成数据,因为它工作正常吗?

  2. 如果滑动窗口,k=9 是最好的猜测,我是否应该超参数化这个数字 K 并考虑它来搜索最小损失?我害怕这样做,因为超参数通常会影响网络本身,而不是训练数据集,但请注意 K 定义了数据集长度,我是否会通过超参数化来产生不希望的偏差?

  3. 如果滑动窗口,我应该用 y=[x2, x3,...,x9, x10] 生成 y 形 [9x300],而不是当前的 y 代?如果我尝试两种输出结构并选择降低开发测试中损失的一种,我会检查验证集吗?

  4. 如果没有滑动窗口,我应该对每个原始时间序列输入一个序列进行训练吗?并使用注意力或双向lstm?2

  5. 改组生成带有改组的部分句子的批次,而不是来自相同原始序列的批次。但由于洗牌是在分离数据进行训练和测试之前完成的,所以我似乎不是以最好的方式(甚至是正确的方式)。我是否应该首先将原始长句子分成训练/每个测试阶段,然后用滑动窗口(如果适用)打破它们?

参考:

3个回答

三个简单的步骤:

  • 使数据平稳(去除趋势和季节性)。
  • 对标签数据实施 PACF 分析(例如:加载)。
  • 解释 PACF 图以选择滑动
    窗口的最佳滞后值

PACF 分析简明教程:http ://rinterested.github.io/statistics/arima.html

在情感分析中,通常根据训练集的平均值来确定情感长度(句子中的单词数),并对较短的句子进行填充,对较长的句子进行切割。

我认为这将是最好的选择。

所以你的问题是关于 LSTM 的窗口大小。选择窗口大小取决于数据集。例如,在股票数据的情况下,您可以选择较大的窗口大小。我看到一些股票预测的论文,其中窗口大小设置为 30。

请注意,如果大窗口大小意味着我们正在使用复杂的网络。这意味着训练时间也会增加。因此在选择窗口大小时需要考虑模型的准确性和计算复杂度。