用於時序數列預測的 Elman神經網絡

最近一直在做時序數列預測的東東,因爲數據本身的特點想到了MarKov算法,但效果並不理想,後來想到了ARIMA(自迴歸差分滑動平均算法),

一. ARIMA算法

其形式分爲AR、MA、ARMA,其核心意義,是確定當前數據與過去幾天數據之間有相互的關係(僅與過去數據有關爲AR模型),或者跟過去幾天的噪聲有關(僅與噪聲有關爲MA模型)與過去數據、噪聲都有關則爲ARMA模型。其流程爲:

1.檢驗時序數列是否爲平穩序列,所謂平穩,形象上說就是數列均值固定,方差固定,準確說,平穩數列需要經過單位根檢驗;如果不平穩,可以做一階差分,再檢驗是否平穩,如不,做二階差分直到平穩爲止。

2. 定階,所謂定階,就是確定當前數據到底跟過去幾天數據有關,這一步,同時選定模型,根據自相關、偏自相關函數的截尾、拖尾情況選定模型,其中過去幾天數據的系數由偏相關係數決定,噪聲係數由自相關係數決定。具體選取需要計算各選定模型的AIC值,選取最小AIC對應的模型,作爲最終模型。

3. 檢驗模型參數的顯著性,同時檢驗模型殘差是否爲高斯白噪聲,如果是高斯白噪聲說明,模型基本提取到數據的特徵,能很好擬合數據,否則,回到步驟2

該算法有對應的專業軟件,EVIEWS,但是該算法有一個弊端,需要人爲定階,其次,效果未必好,這是最頭疼的地方

二. Elman 神經網絡

Elman跟傳統神經網絡的差別支出在於,它多了一個copy層,該copy層僅僅是保留隱藏層上一次的輸出,在這一次計算隱藏側輸出的時候,用到copy層值,也就是這一次的隱藏側輸出受到了上一次隱藏側輸出的影響。其訓練方式同樣是BP算法,需要說明的是,Elman輸入結點數目一旦確定,其輸入樣本的處理就一定,舉例倆說,比如有一個時序數列,該數列是一天產生1個數據,前5天的數據是:2,4,6,8,9,現在輸入結點爲3,那麼樣本爲:①input:2,4,6,label:8。②input:4,6,8 label:9。這就是樣本的處理方式,當然樣本可能需要歸一化等處理,這都屬於預處理範疇,不做討論。基於Python的Elman工具包PyNeurGen,裏面包含豐富的神經網絡包,對於java愛好者,可以調用Encog Machine Learning Framework,它同時包含C#版本,對應user guide ,Elman做時序數列的預測,其弊端對應神經網絡的一些弊端,比如結點數目的選取,迭代次數的設定等,但是其效果大體上讓人滿意,對於神經網絡做時序數列預測,對應還有Jordan Neural network, NAR network, NARX neteork。都可以參考,他們統稱爲遞歸神經網絡,他們的特點都是保存某一層或者基層結點上一次的輸出,並作用於這一次的計算。這樣就將數據的時序性體現出來了。。上面對應的幾種網絡在參考包裏都有不同程度的涉及,有的甚至包含全部遞歸網絡結構。

三  基於 tensorflow 的時序數列預測方法

Tensorflow1.3版本中,加入了一個Tensorflow Time Series 模塊(源碼地址,簡稱TFTS),TFTS 專門設計了一套針對時間序列預測問題的API,目前提供了AR、Anomaly Mixture AR、LSTM三種預測模式,甚至還有GPU選項

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章