为 RNN 设置正确的输入

Setting correct input for RNN

在数据库中有记录的时间序列数据:

对于每个 device,在发出警报之前有 4 小时的时间序列数据(间隔为 5 分钟)和 4 小时的时间序列数据(同样间隔为 5 分钟)没有发出任何警报。该图更好地描述了数据的表示,对于每个 device:

我需要在python中使用RNN class进行警报预测。当 temperature 低于 min limit 或高于 max limit.

时,我们定义警报

在阅读了 tensorflow here 的官方文档后,我无法理解如何设置模型的输入。我应该事先规范化数据还是什么,如果是的话如何?

阅读答案 也没有帮助我清楚地了解如何将我的数据转换为 RNN 模型可接受的格式。

关于 model.fit 中的 XY 对我的情况应该是什么样子的任何帮助?

如果您看到与此问题相关的任何其他问题,请随时发表评论。

PS。我已经在 docker 中使用 tensorflowkeras 等设置了 python,以防此信息有帮助。

您可以从问题中提到的 开始。

Any help on how the X and Y in model.fit should look like for my case?

X 应该是形状为 [num samples, sequence length, D] 的 numpy 矩阵,其中 D 是每个时间戳的多个值。我想你的情况是D=1,因为你只传递了温度值。

y 应该是目标值的向量(如代码片段中所示)。二进制(alarm/not_alarm)或连续(例如最大温度偏差)。在后一种情况下,您需要更改 sigmoid 激活。

Should i normalise the data beforehand

是的,预处理原始数据是必不可少的。我在这里看到 2 件重要的事情要做:

  1. 使用 min-max 或标准化 (wiki, sklearn preprocessing) 对温度值进行标准化。另外,我会添加一点平滑。
  2. 从所有 time-series 中删除最后一个时间戳的一部分以避免信息泄漏。

最后,我想说这个任务比看起来要复杂得多。您可能想找一个很好的 time-series 分类入门教程,或者一般的机器学习课程。我相信你能找到比 RNN 更好的方法。

是的,您应该规范化您的数据。我会每天查看差异。又名差异间隔是 24 小时/ 5 分钟。您也可以尝试年度差异,但这取决于您在 window 大小中的选择(记住 RNN 不能很好地处理大 windows)。您可能想像上面的用户所说的那样使用 log-transformation,但这似乎有点固定,所以我也可以看到不需要。

对于您的 model.fit,您在技术上正在训练语言模型的等价物,您可以在其中预测下一个输出。因此,您的输入将是您选择的 window 大小的预测 x 值和之前的归一化 y 值,而您的目标值将是给定时间步长 t 的归一化输出。只是想让你知道,一维 Conv Net 适用于分类,但由于温度尖峰的时间方面,它对 RNN 的调用也很好。

一旦你在 x 值和归一化 y 值上训练了一个模型并且可以告诉它它实际上正在学习(收敛)那么你实际上可以使用 model.predict 与预测 x 值和预测归一化 y值。获取输出并 un-normalize 它以获得实际温度值或仅保留归一化值并将其反馈回模型以获得时间 +2 预测