【问题标题】:Setting correct input for RNN为 RNN 设置正确的输入
【发布时间】:2020-11-23 09:31:43
【问题描述】:

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

  • device - timestamp - temperature - min limit - max limit
  • device - timestamp - temperature - min limit - max limit
  • device - timestamp - temperature - min limit - max limit
  • ...

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

我需要在 python 中使用 RNN 类进行警报预测。当temperature 低于min limit 或高于max limit 时,我们定义警报。

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

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

对于我的情况,model.fit 中的 XY 的外观有何帮助?

如果您发现有关此问题的任何其他问题,请随时发表评论。

PS。我已经在docker 中设置了pythontensorflowkeras 等,以防这些信息有帮助。

【问题讨论】:

    标签: machine-learning neural-network lstm normalization recurrent-neural-network


    【解决方案1】:

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

    关于 model.fit 中的 X 和 Y 在我的情况下应该是什么样子的任何帮助?

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

    y 应该是目标值的向量(如在 sn-p 中)。二进制(警报/not_alarm)或连续(例如最大温度偏差)。在后一种情况下,您需要将 sigmoid 激活更改为其他内容。

    我应该事先规范化数据

    是的,对原始数据进行预处理至关重要。我在这里看到了两件重要的事情:

    1. 使用最小值-最大值或标准化(wikisklearn preprocessing)标准化温度值。另外,我会添加一些平滑处理。
    2. 从所有时间序列中删除最后时间戳的一部分以避免信息泄漏。

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

    【讨论】:

    • 感谢您的意见。对于我的情况,您能否建议比 RNN 更好的方法?
    • 看看离散时间傅里叶变换来预处理时间序列可能会很有趣。
    • 我相信您可以通过使用更简单的分类器(如线性回归或 SVM)来获得不错的结果。至于特征工程,我会执行标准化 + 取数据的百分位数(例如,最小值、5%、10%、...、95%、最大值)。此外,指数移动平均线以及股票价格预测中使用的其他东西可能很有趣。另外,同意@HarditSingh 关于 DFT 的看法。换句话说,就是特征工程规则。
    • 关于深度学习方法,我同意@Drew 的观点,一维CNN 可以做得很好。此外,“变压器”架构被认为优于 RNN。但实现起来更复杂。
    • 感谢@roman 的意见,对我来说真的很有价值。
    【解决方案2】:

    是的,您应该标准化您的数据。我会每天查看差异。又名差异间隔是 24 小时 / 5 分钟。您也可以尝试每年的差异,但这取决于您对窗口大小的选择(请记住 RNN 不适用于大窗口)。您可能想使用上述用户所说的日志转换,但这似乎有些固定,所以我也可以看到不需要。

    对于您的 model.fit,您在技术上训练语言模型的等价物,您可以在其中预测下一个输出。因此,您的输入将是您选择的任何窗口大小的预测 x 值和之前的标准化 y 值,并且您的目标值将是给定时间步 t 的标准化输出。只是为了让您知道一维 Conv Net 有利于分类,但由于温度峰值的时间方面,所以对 RNN 的调用很好。

    一旦您在 x 值和归一化 y 值上训练了模型,并且可以判断它实际上正在学习(收敛),那么您实际上可以将 model.predict 与预测 x 值和预测归一化 y 值一起使用。获取输出并对其进行非归一化以获得实际温度值,或者仅保留归一化值并将其反馈回模型以获得时间+2预测

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多