微软开源时空预测Fost的使用和解读

2024-03-09 18:20

本文主要是介绍微软开源时空预测Fost的使用和解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、引言

时空预测是指对未知系统状态在时间和空间上的预测,它是地球系统科学、交通运输、智慧城市等领域的重要技术和工具。时空预测的目的是利用历史数据和当前信息,通过建立时空依赖关系,来推断未来的变化趋势和可能的情景。时空预测的应用价值非常巨大,它可以帮助人们提前了解和应对各种自然灾害、社会危机、经济波动等问题,从而提高决策效率和社会福祉。

时空预测面临着许多挑战和问题,主要包括以下几个方面:
一是数据的高度非线性和复杂性。时空数据往往具有多尺度、多源、多变量、多模态等特点,同时受到多种因素的影响,如气候变化、人口迁移、政策干预等,导致数据的分布和结构难以捕捉和建模。

二是预测任务的多样性和难度。时空预测的任务可以涉及不同的时间跨度(如短期、中期、长期)、空间范围(如局部、区域、全局)、预测目标(如单点、多点、区域、全域)、预测形式(如确定性、概率性、演绎性、结论性)等,不同的任务对预测方法的要求和评估标准也不同。

三是时空依赖关系的复杂性和动态性。时空数据之间存在着复杂的依赖关系,如时间上的自相关、空间上的异质性、时空上的交互作用等,这些依赖关系不仅需要考虑数据的拓扑结构,还需要考虑数据的语义含义和物理机制。此外,时空依赖关系也可能随着时间和空间的变化而变化,如季节性、周期性、突发性等,这给预测方法的稳定性和鲁棒性带来了挑。

三是预测结果的不确定性和可解释性。由于数据的噪声、缺失、异常等问题,以及模型的偏差、方差、过拟合等问题,时空预测结果往往具有不确定性,即预测结果可能与真实值存在一定的偏差或误差。

我将介绍一种基于微软fost的时空预测工具,它是一个通用的时空预测开源工具,可以帮助用户在各种业务场景中进行高效的预测。

二、简单工具使用

(一)安装

Win下深度学习环境的安装可以参考安装教程,fost的安装可以参照的安装教程。

Tips 1

torch-geometric与pytorch强依赖的,所以建议本机的cuda版本、pytorch、torch-geometric一直,也就是若你本机的安装的是12.1版本的cuda,你安装pytorch时候,也要选择选择cuda12.1,在torch-geometric也要选择cuda12.1。

Tips 2

Fost不支持cpu版本的pytorch,后期若我们需打包fost项目分享出去,可以用pyinstaller打包项目为纯cpu运行的版本,不过要修改配置文件、项目几个文件的代码

Tips 3

pip install openpyxl
安装python excel依赖,方便将结果保存为表格

(二)使用

fost的使用非常简单,只需要2个步骤:

1.准备数据

用户需要将自己的数据整理成fost所需的格式,包括训练数据文件(train.csv)和图结构文件(graph.csv),具体的数据格式可以参考数据格式一节,因为大局域网的原因,下不了官方的数据,在这里
链接:https://pan.baidu.com/s/1RdEceV9tdV2gTcesxb54WA?pwd=7d5e
提取码:7d5e。
可以看到,在官方的案例里面,有效的格式可能如下所示:
在这里插入图片描述

Node:当前数据的节点名称
日期:当前数据的日期或时间戳
TARGET:预测目标

2.运行命令

我们参考官方的“Predict States Energy Data”案例给出一个教程,并给出注释。

#导入fostool.pipeline模块
from fostool.pipeline import Pipeline
#导入数据
train_path = r'FOST_example_data\Energy\train.csv'
graph_path = r'FOST_example_data\Energy\graph.csv'
#预测的步长
lookahead = 5
#Pipeline的建立,可以看做模型建立
fost = Pipeline(lookahead=lookahead, train_path=train_path, graph_path=graph_path)
#训练
fost.fit()
#预测
result = fost.predict()
模型保存
#fost.save_pipeline()
#保存预测结果
result.to_excel("result.xlsx")

到这里,我们就完成了第一个基于图神经网络的时空预测。
若仅仅是简单使用,到这里就可以了,下面是项目的优化使用。

三、项目的一些解读

(一)配置文件解读

配置参数文件是fostool\config文件下的default.yaml,若想根据自己的数据和任务来配置fost的参数,需要在
fost = Pipeline(lookahead=lookahead, train_path=train_path, graph_path=graph_path config_path= r'FOST_example_data\Energy\ default.yaml')
传入config的参数,在这里给出config的解读

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.base:# 模型保存路径dump_path: 'runs'# 损失函数loss_func: 'mse'
data_handler:#细看Tips 4lookback: 'auto'
trainer:# 最大的训练次数,因为fost项目设置运用了早停策略,所以不一定运行完一次max_epochsmax_epochs: 100# coda or cpu,实际项目上面默认配置下,占1.7显存device: 'cuda'
model:# KRNN模型KRNNModel:cnn_dim: 64cnn_kernel_size: 3rnn_dim: 64rnn_dups: 3# 刚看到这个项目的时候,以为只纯GNN模型,但是看到这里才发现并不是,SandwichModel是cnn、rnn、gcn三明治混合的模型SandwichModel:cnn_dim: 64cnn_kernel_size: 3rnn_dim: 64rnn_dups: 3gcn_dim: 64gcn_type: 'gat'gcn_aggr: 'max'gcn_norm: 'none'# MLP 前馈神经网络MLP_Res:hid_dim: 64nb_layer: 4
fusion:# fost支持trunacted、average两种模型融合策略method: 'trunacted'

(二)预测结果解读

现在从官方的“Predict States Energy Data”案例,开始解读

1. model KRNNModel_3164_7是什么意思

在这里插入图片描述
我们来看fostool\model文件下的__init__.py
在这里插入图片描述

可以看到,这里给出的模型名字并不是实际的名字,是对模型名字哈希后的,其中model KRNNModel_3164_7中的7,就是我们设置的lookback_list参数带来的,这就带来第一个问题,在配置文件里面,也有个lookback参数,这两有什么区别,看Tips 4。

Tips 4

我们来看fostool文件下的pipeline.py函数
在这里插入图片描述

当模型的预测步长小于7的时候,lookback_list为[7, 14, 24]。实际上,配置文件中lookback是不齐作用的,想修改lookback_list参数,我们需要在Pipeline(lookahead=lookahead, train_path=train_path, graph_path=graph_path, lookback_list=[10, 20, 30])进行导入,不知道是否为微软写下的bug。

2.我们是用哪个模型得出的预测结果

我们来看fostool\ task文件下的fusion.py函数
在这里插入图片描述

Fost支持的模型融合为averagetrunacted两种模型融合策略,其中average将所有模型的结果进行取均值后给出,trunacted比较复杂,不是简单的取最好的模型输出,而是取出那些误差<最小误差的模型+误差的标准差模型,然后将所有模型的结果进行取均值后给出。

3.fost对训练数据的数量要求是多少

我们来看fostool文件下的pipeline.py函数,可以看到模型最低要求的训练数据量为100,若想修改,直接改就行。
在这里插入图片描述

这篇关于微软开源时空预测Fost的使用和解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/791557

相关文章

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3