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

news2024/12/27 15:09:40

一、引言

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

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

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

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

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

我将介绍一种基于微软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),具体的数据格式可以参考数据格式一节,因为大局域网的原因,下不了官方的数据,在这里来这里下载。
可以看到,在官方的案例里面,有效的格式可能如下所示:
在这里插入图片描述

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 4
    lookback: 'auto'
trainer:
    # 最大的训练次数,因为fost项目设置运用了早停策略,所以不一定运行完一次max_epochs
    max_epochs: 100
    # coda or cpu,实际项目上面默认配置下,占1.7显存
    device: 'cuda'
model:
    # KRNN模型
    KRNNModel:
        cnn_dim: 64
        cnn_kernel_size: 3
        rnn_dim: 64
        rnn_dups: 3
    # 刚看到这个项目的时候,以为只纯GNN模型,但是看到这里才发现并不是,SandwichModel是cnn、rnn、gcn三明治混合的模型
    SandwichModel:
        cnn_dim: 64
        cnn_kernel_size: 3
        rnn_dim: 64
        rnn_dups: 3
        gcn_dim: 64
        gcn_type: 'gat'
        gcn_aggr: 'max'
        gcn_norm: 'none'
    # MLP 前馈神经网络
    MLP_Res:
        hid_dim: 64
        nb_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,若想修改,直接改就行。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《PySpark大数据分析实战》-24.数据可视化图表介绍

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…

强化学习4——动态规划初探

动态规划具体指的是在某些复杂问题中&#xff0c;将问题转化为若干个子问题&#xff0c;并在求解每个子问题的过程中保存已经求解的结果&#xff0c;以便后续使用。实际上动态规划更像是一种通用的思路&#xff0c;而不是具体某个算法。 在强化学习中&#xff0c;被用于求解值函…

CAN总线基础详解以及stm32的CAN控制器

目录 CAN简介 CAN总线拓扑图 CAN总线特定 CAN应用场景 CAN的物理层 CAN的协议层 CAN数据帧介绍 CAN位时序介绍 数据同步过程 硬件同步 再同步 CAN总线仲裁 stm32的CAN控制器 CAN控制器介绍 CAN控制器模式 CAN控制器框图 接收过滤器 CAN控制器波特率计算 CAN相…

基于SSM的图书商城(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书商城&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

libexif库介绍

libexif是一个用于解析、编辑和保存EXIF数据的库。它支持EXIF 2.1标准(以及2.2中的大多数)中描述的所有EXIF标签。它是用纯C语言编写的&#xff0c;不需要任何额外的库。源码地址&#xff1a;https://github.com/libexif/libexif &#xff0c;最新发布版本为0.6.24&#xff0c;…

topsis算法

TOPSIS &#xff08;Technique for Order Preference by Similarity to an Ideal Solution &#xff09;模型中文叫做“逼近理想解排序方法”&#xff0c;是根据评价对象与理想化目标的接近程度进行排序的方法&#xff0c;是一种距离综合评价方法。基本思路是通过假定正、负理想…

C#,数值计算,基础函数——任意位数π的数值算法源程序与数据可视化

对于数学常数 PI 后面位数的计算与追求&#xff0c;是数学家与计算机科学家们乐此不疲的游戏。 一、圆周率PI简史 圆周率&#xff08;Pi&#xff09;是圆的周长与直径的比值&#xff0c;一般用希腊字母π表示&#xff0c;是一个在数学及物理学中普遍存在的数学常数。π也等于圆…

关于图像分割任务中按照比例将数据集随机划分成训练集和测试集

1. 前言 之前写了分类和检测任务划分数据集的脚本&#xff0c;三大任务实现了俩&#xff0c;基于强迫症&#xff0c;也实现一下图像分割的划分脚本 分类划分数据&#xff1a;关于图像分类任务中划分数据集&#xff0c;并且生成分类类别的josn字典文件 检测划分数据&#xff…

如何计算ThreadLocal对象的hash值?【ThreadLocal技术】(含AtomicInteger的介绍)

如何计算ThreadLocal对象的hash值&#xff1f; 一、前置知识二、问题三、剖析源码&#xff1a;如何计算ThreadLocal对象的hash值&#xff1f;1、源码1.1 咱先得知道nextHashCode的起始值1.1.1 那就要先了解AtomicInteger创建AtomicInteger原子的增减操作原子的加法操作原子的获…

对Tor的去匿名化攻击的调查

文章信息 论文题目&#xff1a;De-Anonymisation Attacks on Tor: A Survey 期刊&#xff08;会议&#xff09;&#xff1a; IEEE Communications Surveys & Tutorials 时间&#xff1a;2021 级别&#xff1a;中科院1区&#xff08;IF&#xff1a;35.6&#xff09; 文章链…

Python 面向对象之反射

Python 面向对象之反射 【一】概念 反射是指通过对象的属性名或者方法名来获取对象的属性或调用方法的能力反射还指的是在程序额运行过程中可以动态获取对象的信息(属性和方法) 【二】四个内置函数 又叫做反射函数 万物皆对象&#xff08;整数、字符串、函数、模块、类等等…

黑马程序员Java项目实战《瑞吉外卖》,轻松掌握springboot + mybatis plus开发核心技术的真java实战项目——第三部分

黑马程序员Java项目实战《瑞吉外卖》&#xff0c;轻松掌握springboot mybatis plus开发核心技术的真java实战项目——第三部分 1. 菜品管理的业务功能1.1 文件的上传和下载&#x1f647;‍♂️1.2 新增菜品1.3 接收页面提交的数据&#x1f647;‍♂️&#xff08;涉及两张表&a…

大数据技术架构

1 技术架构矩阵 大数据技术栈虽然比较多,但可以抽象为输入(数据接入)--处理(数据处理、数据分析)--输出(数据应用)。工作角色分工,数据处理以数据仓库开发人员为主,数据分析以数据分析师为主,其他所有组件、系统、技术相关归为数据平台。 2 数据源 大数据的数据来源…

媒体捕捉-iOS自定义二维码扫描功能

引言 随着iOS 7引入AV Foundation框架&#xff0c;二维码扫描功能已经成为iOS应用程序中不可或缺的一部分。现今&#xff0c;几乎每个应用都充分利用这一功能&#xff0c;为用户提供了诸如扫码登录、扫码填充等丰富多彩的便捷体验。这项技术不仅丰富了应用功能&#xff0c;也为…

我与nano实验室交流群

感兴趣的同学、朋友可以加入群聊共同学习聊天哦。 主要是工训赛、电赛、光电、集成电路等等&#xff0c;会分享一些开源代码&#xff0c;博主自己做的项目&#xff0c;自己画的PCB等等&#xff0c;包含但不限于STM32、K210、V831、机器视觉&#xff0c;机械臂&#xff0c;ROS&a…

Packet Tracer - Configure AAA Authentication on Cisco Routers

Packet Tracer - 在思科路由器上配置 AAA 认证 地址表 目标 在R1上配置本地用户账户&#xff0c;并使用本地AAA进行控制台和vty线路的身份验证。从R1控制台和PC-A客户端验证本地AAA身份验证功能。配置基于服务器的AAA身份验证&#xff0c;采用TACACS协议。从PC-B客户端验证基…

我的隐私计算学习——联邦学习(2)

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具&#xff0c;经由自己阅读后整理而成 &#xff08;三&#xff09;联邦学习的算子 ------------------------ 算子是什么&#xff1f;--------------------------- ​ 从广义上讲&#xff0c;对任何函数进行某一项操作都可…

【Verilog】基于Verilog的DDR控制器的简单实现(一)——初始化

在FPGA中&#xff0c;大规模数据的存储常常会用到DDR。为了方便用户使用&#xff0c;Xilinx提供了DDR MIG IP核&#xff0c;用户能够通过AXI接口进行DDR的读写访问&#xff0c;然而MIG内部自动实现了许多环节&#xff0c;不利于用户深入理解DDR的底层逻辑。 本文以美光(Micro…

Linux驱动学习—中断

1、中断基础概念 1.1 什么是中断 CPU在正常运行期间&#xff0c;由外部或者内部引起的时间&#xff0c;让CPU停下当前正在运行的程序&#xff0c;转而去执行触发他的中断所对应的程序&#xff0c;这就是中断。 响应中断的过程&#xff1a; <1>中断请求 <2>中断…

给您的应用添加弹窗

概述 在我们日常使用应用的时候&#xff0c;可能会进行一些敏感的操作&#xff0c;比如删除联系人&#xff0c;这时候我们给应用添加弹窗来提示用户是否需要执行该操作&#xff0c;如下图所示&#xff1a; 弹窗是一种模态窗口&#xff0c;通常用来展示用户当前需要的或用户必须…