簡體   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