XDZhelheim / STAEformer

[CIKM'23] Official code for our paper "Spatio-Temporal Adaptive Embedding Makes Vanilla Transformer SOTA for Traffic Forecasting".
https://arxiv.org/abs/2308.10425
132 stars 16 forks source link

关于数据集的问题 #8

Closed ljcccccccccccccccccc closed 5 months ago

ljcccccccccccccccccc commented 5 months ago

你好 我发现你在代码中的数据集PEMS04有三个特征,与公开数据集PEMS04的三个特征(流量,速度,占有率)好像不太一样,能否说一下这三个特征是什么嘛 你的数据集显示 image

公开的数据集 image

XDZhelheim commented 5 months ago

你好,我们上传的所有数据集(npz)都是经过数据预处理之后的。PEMS0X的三个特征分别为:

  1. flow (LA和BAY是speed)
  2. time-of-day,一个0~1之间的数,代表当前时间点在一天中的哪个位置(例如0.5=中午12点)
  3. day-of-week,0~6的整数,代表当前时间点是周几

这里单纯碰巧了和原始数据都是3个。

相关用法: https://github.com/XDZhelheim/STAEformer/blob/2dfb9e35c2f04bbb7136657100ea3d8afa5fc4e5/model/STAEformer.py#L192-L199

Andy-HuY commented 5 months ago

你好,我们上传的所有数据集(npz)都是经过数据预处理之后的。PEMS0X的三个特征分别为:

  1. flow (LA和BAY是speed)
  2. time-of-day,一个0~1之间的数,代表当前时间点在一天中的哪个位置(例如0.5=中午12点)
  3. day-of-week,0~6的整数,代表当前时间点是周几

这里单纯碰巧了和原始数据都是3个。

相关用法:

https://github.com/XDZhelheim/STAEformer/blob/2dfb9e35c2f04bbb7136657100ea3d8afa5fc4e5/model/STAEformer.py#L192-L199

原来是这个意思,感谢作者的详细解答及精彩工作。顺道请问下作者两个问题:

  1. time-of-day,day-of-week这种方式很多文章都有用且写,是说192 to 199行就做了预处理这件事吗?不知道这种预处理对预测精度正向影响程度如何,应该也算作embedding的一种吧,我感觉好的embedding还是影响挺大
  2. 我看一些文章多数是要么做03~08,要么做BAY+LA,您文章里面都能横跨着做是跟自己处理的index有直接关联吗
XDZhelheim commented 5 months ago
  1. 192~199行是使用方法,即如何取出处理好的数据集里的tod和dow,不是数据预处理。数据集处理的代码(如何计算tod dow的值,生成data.npz & index.npz这些文件)在我的隔壁项目
  2. tod和dow是不是一种embedding:我们模型里是有tod_emb和dow_emb的(Paper里3.1节第二段),就在199行后面 https://github.com/XDZhelheim/STAEformer/blob/2dfb9e35c2f04bbb7136657100ea3d8afa5fc4e5/model/STAEformer.py#L204-L213 相关定义: https://github.com/XDZhelheim/STAEformer/blob/2dfb9e35c2f04bbb7136657100ea3d8afa5fc4e5/model/STAEformer.py#L156-L159 至于tod和dow这两个特征本身的值,感觉可以看做一个加强版的positional encoding(蕴含了周期性)。
  3. 为什么能做6个数据集:跟index无关,只是程序设计。自己设计规定好数据的存储格式以及读取方法,解耦出一个独立的数据集模块,剩下的就是按规定添加新数据集,无需改动其他代码(隔壁已经让我加到17个了)。 另外,其他文章的代码也能加新数据集进去,按他们的处理脚本自己改一改适配一下就行。没有什么不能横跨的问题,就看你想不想卷了 : (
Andy-HuY commented 5 months ago

谢谢这么耐心的回复,理解又多一点点!!!我再去学习下您隔壁的内容,感谢!祝好

---原始邮件--- 发件人: "Zheng @.> 发送时间: 2024年5月30日(周四) 上午10:41 收件人: @.>; 抄送: @.**@.>; 主题: Re: [XDZhelheim/STAEformer] 关于数据集的问题 (Issue #8)

192~199行是使用方法,即如何取出处理好的数据集里的tod和dow,不是数据预处理。数据集处理的代码(如何计算tod dow的值,生成data.npz & index.npz这些文件)在我的隔壁项目。

tod和dow是不是一种embedding:我们模型里是有tod_emb和dow_emb的(Paper里3.1节第二段),就在199行后面 https://github.com/XDZhelheim/STAEformer/blob/2dfb9e35c2f04bbb7136657100ea3d8afa5fc4e5/model/STAEformer.py#L204-L213 相关定义: https://github.com/XDZhelheim/STAEformer/blob/2dfb9e35c2f04bbb7136657100ea3d8afa5fc4e5/model/STAEformer.py#L156-L159 至于tod和dow这两个特征本身的值,感觉可以看做一个加强版的positional encoding(蕴含了周期性)。

为什么能做6个数据集:跟index无关,只是程序设计。自己设计规定好数据的存储格式以及读取方法,解耦出一个独立的数据集模块,剩下的就是按规定添加新数据集,无需改动其他代码(隔壁已经让我加到17个了)。 另外,其他文章的代码也能加新数据集进去,按他们的处理脚本自己改一改适配一下就行。没有什么不能横跨的问题,就看你想不想卷了 : (

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>

XDZhelheim commented 5 months ago

好的,也祝你进展顺利 😊

ljcccccccccccccccccc commented 4 months ago

十分感谢