这是清华大学今年(2023年)刚出的一篇关于时间序列的论文TimesNet:https://openreview.net/pdf?id=ju_Uqw384Oq
GitHub地址:GitHub - thuml/Time-Series-Library: A Library for Advanced Deep Time Series Models.
在论文的实验部分中,TimesNet在短期、长期预测、分类、异常检测以及缺失值处理这5个任务上都展现出了超越其他模型的效果,能够作为一个时间序列任务的通用基础模型(Foundation Model)。【Youth PhD Talk】ICLR 预讲会(三)_哔哩哔哩_bilibili 在B站上有论文一作的讲解,在差不多2:02:48那里。底下那个指路的评论就是我了。
接下来就从论文理解以及代码的角度来解释一下TimesNet。
一、时间序列的二维变化
和其他深度学习任务(图像以及自然语言处理)不同,尽管时间序列是连续记录的,然而每个时间点只记录了一些标量,语义信息不足,所以研究都集中在数据的时间变化上(temporal variation)。然而现实的时间序列数据,通常都是由各个有着不同周期的不同因素耦合在一起的,增加了建模难度。并且,时间点本身不仅受到本身缩在周期影响,相邻周期也会对这一周期的时间点产生影响。文中将这2种影响时间序列的变化分别称之为“期内变化”(intraperiod-variation)和“期间变化”(interperiod-variation)。为了将这2种变化区分开来,文中将一维的时间序列数据转换为了二维空间数据:

其中,蓝色轴方向的店代表期间变化,可以看作是“不同周期,同一相位上时间点的数值”,而红色轴代表期内变化,即“统一周期上的不同时间点”。
这样做不仅将期间与期内变化分离了开来,同时二维数据还具有局部性(locality,如下图所示),使得一些用以作图像处理的方法也可以在这上面使用。
具体在实操时,使用傅里叶变换将时序转换到频域,观察前k个振幅的点,使用它们(频率)的倒数获得周期,以此确定不同周期用以作二维分解。
def FFT_for_Period(x, k=2):
# [B, T, C]
xf = torch.fft.rfft(x, dim=1)
# find period by amplitudes
frequency_list = abs(xf).mean(0).mean(-1) #展平
frequency_list[0] = 0 #第0项代表周期正无穷,舍去
_, top_list = torch.topk(frequency_list, k)#前k个振幅(能量)的点
top_list = top_list.detach().cpu().numpy()
period = x.shape[1] // top_list #周期
return period, abs(xf).mean(-1)[:, top_list]#返回周期与振幅(权重)
具

TimesNet是一种新提出的时间序列模型,通过傅里叶变换将一维时间序列转化为二维数据,利用二维卷积和InceptionBlock进行特征提取。该模型在短期预测、长期预测、分类、异常检测和缺失值处理等任务上表现优越,有望成为时间序列任务的基础模型。
最低0.47元/天 解锁文章
5791

被折叠的 条评论
为什么被折叠?



