繁体   English   中英

使用傅立叶分析进行时间序列预测

[英]Using fourier analysis for time series prediction

对于已知具有季节性或日常模式的数据,我希望使用傅立叶分析来进行预测。 在运行时间序列数据fft后,我获得系数。 如何使用这些系数进行预测?

我相信FFT假设它接收的所有数据构成一个周期,那么,如果我只是使用ifft重新生成数据,我也在重新生成我的函数的延续,那么我可以将这些值用于未来的值吗?

简单地说:我运行fft为t = 0,1,2,.. 10然后在coef上使用ifft,我可以使用重新生成的时间序列为t = 11,12,... 20?

我知道这个问题对你来说可能不再适用,但对于寻找答案的其他人,我在Python中写了一个非常简单的傅里叶外推的例子https://gist.github.com/tartakynov/83f3cd8f44208a1856ce

在运行脚本之前,请确保已安装所有依赖项(numpy,matplotlib)。 随意尝试一下。 在此输入图像描述 PS局部静止小波可能比傅立叶外推更好。 LSW通常用于预测时间序列。 傅立叶外推的主要缺点是它只是用周期N重复你的系列,其中N是你的时间序列的长度。

听起来你想要一个外推去噪的组合。

您说您想要在多个时段重复观察到的数据。 那么,只需重复观察到的数据。 无需傅立叶分析。

但你也想找到“模式”。 我认为这意味着在观察到的数据中找到主要频率成分。 然后是,采用傅立叶变换,保留最大系数,并消除其余系数。

X = scipy.fft(x)
Y = scipy.zeros(len(X))
Y[important frequencies] = X[important frequencies]

至于周期性重复:设z = [x, x] ,即信号x两个周期。 然后,对于{0,1,...,N-1}中的所有kZ[2k] = X[k] ,否则为零。

Z = scipy.zeros(2*len(X))
Z[::2] = X

在时间序列数据上运行FFT时,会将其转换为频域。 系数乘以系列中的项(正弦和余弦或复指数),每个都具有不同的频率。

外推总是一件危险的事情,但欢迎你试试。 当你这样做的时候,你正在使用过去的信息来预测未来:“通过今天的预测来预测明天的天气。” 请注意风险。

我建议阅读“黑天鹅”

您可以使用@tartakynov发布的库,并且为了不在预测(过度拟合)中重复完全相同的时间序列,您可以向名为n_param的函数添加新参数,并为频率的幅度修复下限h

def fourierExtrapolation(x, n_predict,n_param):

通常你会发现,在一个信号中,有些频率的振幅明显高于其他频率,因此,如果你选择这个频率,你就能够隔离信号的周期性。

您可以添加由特定数字n_param确定的这两行

h=np.sort(x_freqdom)[-n_param]
x_freqdom=[ x_freqdom[i] if np.absolute(x_freqdom[i])>=h else 0 for i in range(len(x_freqdom)) ]

只需添加此项,您就可以预测好而顺畅

关于FFt的另一篇有用的文章: 在R中预测FFt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM