| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【时序预测完整教程】以气温预测为例说明论文组成及PyTorch代码管道构建 -> 正文阅读 |
|
[人工智能]【时序预测完整教程】以气温预测为例说明论文组成及PyTorch代码管道构建 |
文章目录
Intuition博客之前发布了一些时间序列分类和时间序列相关的教程,但是代码不够规范,比较适合入门。为了更加系统地进行时间序列预测任务的研究,本文介绍了撰写一篇时间序列预测论文应具有的部分,以及Pytorch框架下构建模型进行实验的代码仓库构建。 为了提高灵活性和可复现性,代码遵循开源代码规范,并且尽可能使用通用术语。代码放到一下仓库:https://github.com/datamonday/TimeSeriesMoonlightBox。目前只更新了LSTM,GRU和LSTNet模型,之后会增加更多的模型,也会更新TensorFlow2 Pipeline。如有问题,欢迎指正。时间序列预测交流群:1028633890。 由于这学期的课程都是基于PyTorch的,所以决定从一直使用的TensorFlow转PyTorch。通过简单地对比发现,二者之间的差异主要在管道的构建上。TensorFlow封装得更好,训练更加方便,但是难以扩展。PyTorch的灵活性更好,但对于初学者可能有些无从下手。最近阅读了LSTNet,Informer,Autoformer以及Baidu KDD Cup22 的baseline的论文和代码库,非常推荐阅读他们的论文。通过这三个仓库,基本理清了torch框架下构建时间序列预测管道的流程,解决了之前的一些困惑,故总结在此,希望能给需要的同学提供帮助。这些论文的翻译也在之前的博客分享过了,感兴趣的可以在主页搜索。 本文内容包括:首先介绍撰写一篇时间序列预测论文应该考虑的部分,最后介绍代码仓库的搭建。 --------------------------- Paper Component ---------------------------1. Abstract摘要部分。不需要标号。 2. Introduction本文以气温预测为例,说明在torch框架下构建时间序列预测建模的流程。更具体地:
说明:本文研究的问题仅适用于同质数据建模。简单地说,比如一个监测站收集的历年气温数据(一个csv文件或者可以无歧义地合并为一个csv文件)。对于多个监测站的异质数据或者说多个域(domain)的数据,应该考虑用GNN或者其他方式建模,将在后续的文章讨论,本文暂不涉及。 3. Time-Series Forecasting3.1 Forecasting Horizon对于预测范围(horizon),一般分为单步预测和多步预测。
3.2 Forecasting Variable对于预测变量,一般分为单变量预测和多变量预测。
对于多变量预测的情况,从之前博客的评论区来看,疑问比较多的是如何构建数据的标签。一般有两种处理方式:使用滚动预测方式,模型在训练时的输出维度是 3.3 Forecasting Method对于预测方法,一般分为直接预测和递归(滚动)预测。这常常是在多步预测场景下使用。
3.4 Forecasting Task对于预测任务,可以根据上述三种情景,进行组合,常用的有:
4. Forecasting Methodology本部分概述了目前用于时间序列预测建模的常用模型。 4.1 Statistical Model常用的统计模型有AR,ARMA,ARIMA等。 4.2 Tree-based Model常用的树模型有XGBoost,CatBoost,LightGBM等。 4.3 Probability Model常用概率模型有DeepAR,DeepState,MQ-RNN,Prophet等。 4.4 RNN-based Model基于RNN的模型有RNN,LSTM,GRU。 4.5 CNN-Based Model基于CNN的模型有WaveNet。最开始用于语音识别,使用空洞因果卷积增大关注的输入序列长度。 4.6 RNN and CNN-Based Model基于CNN和RNN的模型有:CNN-LSTM,LSTM-CNN,LSTM-RNN,ConvLSTM,LSTNet等。 4.7 Seq2Seq-Baed Model基于序列到序列的模型,其组成通常包括Encoder,Decoder及注意力机制。 4.8 Transformer-Based Model与之前的注意力不同,Transformer引入了多头自注意力(Self-Attention)机制。基于Transformer的模型有:Transformer,LogSparseTransformer,Informer,Autoformer,SpaceTimeformer等。 4.9 BERT-Based Model原生BERT只使用了Transformer的编码器部分,并且是双向的,用于NLP任务。其贡献主要在于自监督(Self-Supervised)的预训练和微调(Pretrain and Fine-Tune)的训练方式,提高了模型性能。 4.10 GNN-Based Model对于空间上有关联性的预测问题,常常使用图神经网络(Graphic Neural Network)建模。根据输入数据的不同,可以分为同质(homogeneous)图和异质(heterogeneous)图。 4.11 Transfer Learning Model基于迁移学习的模型常常用于多个域的数据建模。例如不同气象数据监测站。常用的方法是域适应(Domain Adaptation)和域泛化(Domain Generalization),这也是目前比较火热的研究方向。 4.12 Multimodal-Based Model基于多模态数据的模型不仅仅使用表格数据,还通常结合图片、音频等数据,模型中分别使用不同的网络提取特征,然后进行特征融合,最后将提取得到特征输入到下游预测网络以进行预测。 5. Evaluation Metrics本部分介绍时间序列预测任务中常用的评估指标。 5.1 MAE5.2 MSE5.3 MAPE5.4 RMSE5.5 RMSLE此外,还有一些针对具体任务的评估指标,此处不再介绍。 6. Data Preprocessing本部分介绍数据预处理方法。 6.1 Data Cleaning为提高模型鲁棒性,一般先要处理数据中的异常值和填充缺失值。 6.2 Feature Selection为了降低特征共线性,降低过拟合风险,通常先选择模型输入特征。关于特征选择方法的原理和代码,在之前的博文已经介绍过了,感兴趣的可以下主页搜索特征选择方法。 6.4 Standardize and Normalize关于数据标准化和归一化需要注意的是只能使用训练集计算均值、方差或者最大值、最小值,然后将其应用到验证集和测试集上,以防止数据泄露。 6.5 Sliding Window滑动窗口是常用的时间序列预测样本构建方法的原理和代码,在之前的博客也已经介绍过了,感兴趣的可以主页搜索滑动窗口。 7. Experiments实验部分一般需要给出训练配置,数据介绍以及对预测任务及结果给出合理的分析。 8. Ablation Study消融研究一般用于探索模型的鲁棒性,更充分地证明模型的优异性能。常有的包括,多个数据集对比,预测步长的影长,序列长度的影响,模型超参数的影响,网络架构的影响等等。 9. Conclusion结论部分。 10. Acknowledgement致谢部分。不需要标号。感谢基金支持、研究者的帮助等。 Appendix实验过程中,重要程度较低、不适合放到正文中的一些实验结果分析或者具体地说明。 --------------------------- PyTorch Pipeline ---------------------------I. 运行环境
具体地,可查看 II. 数据集
数据集概览: III. LSTNetIV. 代码说明代码文件结构如下图所示: 文件说明:
V. 运行流程模型的运行流程,可以在 进一步抽象为: 运行试验:
VI. 一些小问题数据处理部分
在
注意上面代码块中 模型输出PyTorch的模型输出与TensorFlow不同,往往需要自己调整。模型通常通过类定义,前向传播在
上述代码块中,模型输出的维度是 训练循环在PyTorch中需要自己编写训练循环,这与TensorFlow不同。通常由两层for循环组成,外层处理epoch,内层处理batch。这部分就是触类旁通的,各个任务都是大同小异。
结语具体地可以查看代码仓库,个人认为弄清楚数据处理步骤,模型输出和编写训练循环是入门的第一步。欢迎指出问题和提出意见,看到之后会第一时间解答。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:20:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |