[英]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}中的所有k
, Z[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.