keras - 预测具有跳跃(异常值)的输出的最佳归一化技术和 LSTM 结构是什么?
问题描述
我有一个具有十个特征(输入)和一个输出的时间序列预测案例。我使用 LSTM 使用 22 个时间步(特征历史)进行一步预测。另外,我申请MinMaxScaler
输入规范化,但我不规范输出。输出包含一些罕见的跳跃(例如 20、50 或超过 100),但其他值介于 0 和 ~5 之间(所有值都是正数)。在这种情况下,正确预测正常输出和异常输出非常重要,因此我不想错过预测模型中的跳跃。我认为如果我MinMaxScaler
用于输出,大多数值将接近零,但其他值(异常值)将接近 1。
标准化输出的最佳方法是什么?我应该让它不归一化吗?
处理这个问题的最佳 LSTM 结构是什么?(目前,我使用 LSTM
relu
和密集层relu
作为最后一层,所以我的输出将是一个正值)。我想我应该为这种情况正确选择激活函数。
解决方案
我认为首先,您应该决定衡量绩效的指标。例如,您想使用 MAE 还是 MSE?或者您根据手头的任务决定的其他一些指标。例如,对于“罕见的跳跃”,您可能会容忍更大的错误,但对于正常情况则不会,反之亦然。一旦确定了错误度量,理想情况下,您应该将其设置为 LSTM 网络最小化的成本函数。
现在的目标是最小化您设置的所需错误度量。如果这是一个凸问题,则输出的缩放将无关紧要。但我们现在认为复杂的深度学习架构并非如此。这意味着,虽然通过梯度下降来最小化成本函数,但它可能会陷入局部最小值,并且收敛非常延迟。在这种情况下,标准化输出可能会有所帮助。如何?
假设您的输出的平均值为 5。最后一层参数初始化为零附近且偏差值为零(即 relu 的线性变换),网络需要了解偏差应该在 5 左右。取决于复杂性这可能需要一些时期。但是,如果您对数据进行归一化,或将偏差初始化为 5,那么您的网络会从对偏差的良好估计开始,从而更快地收敛。
现在回到你的问题:
我至少会使输出均值为零,并使用具有线性输出的 Dense 层。
您的架构看起来不错,如果您认为输入具有复杂的时间依赖性,可以尝试堆叠 2-4 个 LSTM 层。
随意使用您获得的代码和性能更新 OP,我们可以讨论还有什么可以改进的。
推荐阅读
- python - CNTK 在动态轴上的聚集操作
- javascript - 如何在数据表中使用 Rowspan
- android - 如何从 Firebase 中删除推送值
- java - Elasticsearch 无法使用 Java API 查询获取超过 10 个文档
- c# - 在报告进度的同时等待异步文件上传完成
- c# - 如何在两个字符串之间删除和添加字符串
- c++ - 给定boost :: hana中的键元组,如何从映射中获取值元组?
- windows - .NET Core 消息队列解决方案
- continuous-integration - CircleCI 保存工作流中相关作业的输出
- webpack - 热模块更换 HMR 找不到更新。需要完全重新加载!创建反应应用程序和电子