4

是否可以使用stochastic gradient descent進行時間序列分析?如何使用SGD進行時間序列分析

我最初的想法是,假設有一系列(t,v)對,我希望SGD迴歸器預測與t + 1相關的v,將會將日期/時間轉換爲整數值,然後訓練使用鉸鏈損失函數在此列表上的迴歸器。這是可行的嗎?

編輯:這是在scikit-learn中使用SGD implementation的示例代碼。但是,它無法正確預測簡單的線性時間序列模型。它似乎要做的就是計算訓練Y值的平均值,並將其用作測試Y值的預測值。 SGD是不適合進行時間序列分析還是我不正確地制定這個?

from datetime import date 
from sklearn.linear_model import SGDRegressor 

# Build data. 
s = date(2010,1,1) 
i = 0 
training = [] 
for _ in xrange(12): 
    i += 1 
    training.append([[date(2012,1,i).toordinal()], i]) 
testing = [] 
for _ in xrange(12): 
    i += 1 
    testing.append([[date(2012,1,i).toordinal()], i]) 

clf = SGDRegressor(loss='huber') 

print 'Training...' 
for _ in xrange(20): 
    try: 
     print _ 
     clf.partial_fit(X=[X for X,_ in training], y=[y for _,y in training]) 
    except ValueError: 
     break 

print 'Testing...' 
for X,y in testing: 
    p = clf.predict(X) 
    print y,p,abs(p-y) 

回答

3

你應該看看LMS算法。這是一個自適應維納濾波器,可用於預測或用於其他任務。 LMS基於隨機梯度下降。還有許多其他變體,如NLMS,Leaky LMS,Sign LMS。

0

嗯,這不是一個真正的編程問題。但是,無論如何...

時間序列預測的首選方法取決於你對時間序列的瞭解。如果您爲您的任務選擇特定的方法,您總是會對信號的性質以及產生信號的系統的種類作出隱含的假設。任何方法總是系統的一個模型。您對信號和系統的先驗知識越多,您就可以對其進行建模。

如果您的信號具有隨機性,通常ARMA過程或卡爾曼濾波器是一個不錯的選擇。如果這些失敗了,其他更確定性的模型可能會對corse有所幫助,您可以獲得關於您系統的一些信息。