向AI转型的程序员都关注了这个号👇👇👇
人工智能大数据与深度学习 公众号:datayx
下面我们将简要介绍如何修正 GRU 以完成网站流量时序预测。
代码获取方式
关注微信公众号 datayx 然后回复 流量预测 即可获取。
AI项目体验地址https://loveai.tech
预测有两个主要的信息源:
全局特征。如果我们查看自相关(autocorrelation)函数图,就会注意到年与年之间强大的自相关和季节间的自相关。
我决定使用 RNN seq2seq 模型进行预测,原因如下:特征工程
特征预处理模型的核心技术
编码器为 cuDNN GRU,cuDNN 要比 TensorFlow 的 RNNCells 快大约 5 到 10 倍,但代价就是使用起来不太方便,且文档也不够完善。处理长时间序列
我们可以采用 current_day - 365 和 current_day - 90 这两个时间点的编码器输出,并将它们馈送到全连接层以降低维度,并将结果加入到解码器的输入特征中。这个解决方案虽然简单却大大降低了预测误差。
因为我们对注意力机制的复杂度感到不太满意,因此我们试图完全移除注意力机制,并将一年前、半年前、一季度前重要的数据点作为编码器和解码器的附加特征。这样的结果是非常令人惊讶的,甚至在预测质量方面都要比带注意力机制的模型略胜一筹。因此我们最好的公开分数都是仅使用滞后(lagged)数据点实现的,它们都没有使用注意力机制。
滞后数据点另一个重要的优势是,模型可以使用更短的编码器而不需要担心损失过去的信息,因为这些信息现在明确地包含在特征中。在采用这种方法后,即使我们编码器的长度是 60 到 90 天,结果也是完全可以接受的,而以前需要 300-400 天的长度才能获得相同的性能。此外,更短的编码器就等于更快速的训练和更少的信息损失。损失和正则化
最终预测取最接近的整数,负面预测取零。训练和验证
两种方式我都试了,但对于这个任务来说 Walk-forward 更好,因为它与竞赛目标直接相关:使用历史值预测未来值。但是该分割破坏了时序结尾的数据点,使得训练准确预测未来的模型变得困难。降低模型方差
优于强噪音数据的输入,模型不可避免地具有高方差。坦白讲,我很惊讶 RNN 居然从噪音数据中学习到了东西。
在不同seed上训练的相同模型具有不同的表现,有时模型甚至在「不幸」的 seed上变得发散。训练期间,表现也会逐步地发生很大波动。依靠纯粹的运气很难赢得比赛,因此我决定采取行动降低方差。
我不知道哪个训练步骤最适合预测未来(但前数据的验证结果与未来数据的结果只有弱相关关系),所以我不能使用提前停止。但是我知道近似区域,其中模型(可能)进行了充分训练,但(可能)没有开始过拟合。我决定把这个最佳区域设置为 10500 到 11500 次迭代区间内,并且从这个区域的每第 10000 个步骤保存 10 个检查点。超参数调节
支持条件参数(例如,为每层联合调节层数和 dropout;如果 n_layers > 1,第二层上的 dropout 将被调节)原文链接:/Arturus/kaggle-web-traffic/blob/master/how_it_works.md
阅读过本文的人还看了以下:
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加:datayx
长按图片,识别二维码,点关注
AI项目体验
https://loveai.tech