我有看起来像这样的时间序列数据:
Series 1 Series 2
╔══════╦════════╦════════╗ ╔══════╦════════╦════════╦════════╗
║ Time ║ Value1 ║ Value2 ║ ║ Time ║ Value1 ║ Value2 ║ Value3 ║
╠══════╬════════╬════════╣ ╠══════╬════════╬════════╬════════╣
║ 3:30 ║ 10 ║ 100 ║ ║ 3:32 ║ 12 ║ 56 ║ 34 ║
║ 3:31 ║ 11 ║ 50 ║ ║ 3:33 ║ 15 ║ 200 ║ 89 ║
║ 3:36 ║ 12 ║ 80 ║ ║ 3:35 ║ 15 ║ 90 ║ 66 ║
║ 3:50 ║ 11 ║ 80 ║ ║ 3:38 ║ 13 ║ 85 ║ 45 ║
║ 3:50 ║ 12 ║ 60 ║ ║ 3:45 ║ 14 ║ 65 ║ 121 ║
╚══════╩════════╩════════╝ ╚══════╩════════╩════════╩════════╝
重要的特点是
- 数据并非每分钟都存在。
- 每分钟可以进行多次观察。
我想使用 RNN 根据直到那一刻之前的系列 1 和系列 2 的观察来预测系列 1 的下一次观察(并特别使用 keras)。问题是在我发现的所有 RNN 中,数据点之间的时间间隔是恒定的。例如,在预测句子中下一个字符的 RNN 中,一次输入 20 个字符的数据,其中字符之间的“时间间隔”是恒定的。
那么我怎样才能使它适应我拥有的数据呢?我的选择似乎是:
填写每分钟的数据,如果在一分钟内出现多个观察值,则取平均值。然后我可以使用像字符预测 RNN 的输入这样的数据。上述数据将变为
Series 1 ╔══════╦════════╦════════╗ ║ Time ║ Value1 ║ Value2 ║ ╠══════╬════════╬════════╣ ║ 3:30 ║ 10 ║ 100 ║ ║ 3:31 ║ 11 ║ 50 ║ ║ 3:32 ║ 11 ║ 50 ║ ║ 3:33 ║ 11 ║ 50 ║ ║ 3:34 ║ 11 ║ 50 ║ ║ 3:35 ║ 11 ║ 50 ║ ║ 3:36 ║ 12 ║ 80 ║ ║ 3:37 ║ 12 ║ 80 ║ ║ ... ║ ║ ║ ║ 3:50 ║ 11.5 ║ 70 ║ ╚══════╩════════╩════════╝
这种方式确实不太理想,因为在一分钟内发生多次观察的事实中包含了相当多的信息。它还会大大增加数据大小和训练时间。
- 将“时间”变量连同“自上次观察以来的时间”变量一起输入到 RNN 中。我还必须将这两个系列合并为一个,以及一个标志(1 或 2,作为单热编码),指示它来自两个系列中的哪一个。然后我可以一次只提供 20 个(或任何数量)观察的数据,而不是一次 20 分钟。我不确定这是否会很好地工作,而且我在互联网上找不到类似的东西。这是一种有效的方法吗?