GestaltCogTeam/BasicTS

[🐞] <title>关于SOFTS模型forward种处理时间特征的方法的疑问

Closed this issue · 5 comments

Is there an existing issue / discussion for this? | 是否已有关于该错误的issue或讨论?

  • I have searched the existing issues / discussions | 我已经搜索过已有的issues和讨论

Is there an existing answer for this in tutorial? | 该问题是否在教程中有解答?

  • I have searched tutorial | 我已经搜索过tutorial

Current Behavior | 当前行为

在baselines/SOFTS这个文件夹下 sotfs_arch.py文件forward方法的第一行 :

change MinuteOfDay to MinuteOfHour

history_data[..., 1] = history_data[..., 1] * self.time_of_day_size // (self.time_of_day_size / 24) / 23.0
我不理解这个操作是为什么,为什么只对第一个时间特征做处理,而且时间特征中也不一定有MinuteOfDay这个特征(比如采样频率为1h的数据集)

Expected Behavior | 期望行为

No response

Environment | 运行环境

- OS:
- DEVICE:
- NVIDIA Driver:
- CUDA:
- NVIDIA GPU Memory:
- PyTorch:

BasicTS logs | BasicTS日志

No response

Steps To Reproduce | 复现方法

No response

Anything else? | 备注

No response

这里是注释写错了,应该是change MinuteOfDay to HourofDay。目的是为了对应源代码中--embed这个参数,很多模型中默认是timeF,在处理时间戳的方式上会得到offsets.Hour: [HourOfDay, DayOfWeek, DayOfMonth, DayOfYear],和basicts的时间特征不同(具体可见数据集的desc文件)。因此为了保持一致在这里对第一个时间特征做处理。

代码已更新。

这里是注释写错了,应该是change MinuteOfDay to HourofDay。目的是为了对应源代码中--embed这个参数,很多模型中默认是timeF,在处理时间戳的方式上会得到offsets.Hour: [HourOfDay, DayOfWeek, DayOfMonth, DayOfYear],和basicts的时间特征不同(具体可见数据集的desc文件)。因此为了保持一致在这里对第一个时间特征做处理。

感谢您的快速回复,我还有两个问题请教:
1."源代码中--embed这个参数" ,在本项目中哪里能找到这个参数吗,还是要去模型的官方实现中找。
2.能否理解为,即使采样时间是10min。为了保持一致,经过这种处理后,同一个小时内的第一个时间特征 是相同的,也就是粒度变粗了 会出现连续6个一样的数字(一个小时6个采样点)

  1. --embed这个参数在很多transformer-based的模型里会出现,跟数据处理相关,可以看看模型源代码的data_provider.py和data_factory.py文件,本项目中应该是没用到这个参数。
  2. 是的,我理解这是因为长序列预测和时空预测用的数据集不同导致的区别,可能对结果的影响也不大,只是为了和模型源代码保持一致所以处理了一下。
  1. --embed这个参数在很多transformer-based的模型里会出现,跟数据处理相关,可以看看模型源代码的data_provider.py和data_factory.py文件,本项目中应该是没用到这个参数。
  2. 是的,我理解这是因为长序列预测和时空预测用的数据集不同导致的区别,可能对结果的影响也不大,只是为了和模型源代码保持一致所以处理了一下。

明白了,非常感谢您的及时回复。你们的工作非常优秀,我收到了很大的帮助!