原文鏈接:
原文出處:拓端數(shù)據(jù)部落公眾號
用于R語言的多層感知器(MLP)和極限學(xué)習(xí)機(jī)(ELM)進(jìn)行時(shí)間序列預(yù)測。請注意,由于神經(jīng)網(wǎng)絡(luò)無法利用GPU處理,因此大型網(wǎng)絡(luò)的訓(xùn)練速度往往很慢。與現(xiàn)有神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)的不同之處在于,R可以自動設(shè)計(jì)具有合理預(yù)測性能的網(wǎng)絡(luò)。這增加了神經(jīng)網(wǎng)絡(luò)的魯棒性,但也有助于減少訓(xùn)練時(shí)間。
使用MLP進(jìn)行預(yù)測
使用R軟件包,您可以生成外推(單變量)預(yù)測,也可以包含解釋變量。
單變量預(yù)測
最簡單的形式,您只需輸入要建模的時(shí)間序列。
fit1
print(fit1)
輸出表明結(jié)果網(wǎng)絡(luò)具有5個(gè)隱藏節(jié)點(diǎn),對其進(jìn)行了20次訓(xùn)練,并使用中位數(shù)運(yùn)算組合了不同的預(yù)測。自動生成網(wǎng)絡(luò)集合,其訓(xùn)練從不同的隨機(jī)初始權(quán)重開始。此外,它提供了網(wǎng)絡(luò)中包含的輸入。
可以使用plot()獲得直觀的摘要。
plot(fit1)
灰色的輸入節(jié)點(diǎn)是自回歸,而洋紅色的則是確定性輸入(在這種情況下為季節(jié)性)。如果包括任何其他回歸變量,它們將以淺藍(lán)色顯示。
該MLP()函數(shù)接受幾個(gè)參數(shù)來微調(diào)生成的網(wǎng)絡(luò)。該hd參數(shù)定義了固定數(shù)量的隱藏節(jié)點(diǎn)。如果是單個(gè)數(shù)字神經(jīng)網(wǎng)絡(luò)預(yù)測r程序,則神經(jīng)元排列在單個(gè)隱藏節(jié)點(diǎn)中。如果是矢量,則將它們排列成多層。
fit( hd = c(10,5))
稍后我們將介紹如何自動選擇節(jié)點(diǎn)數(shù)。根據(jù)我的經(jīng)驗(yàn)(以及來自文獻(xiàn)的證據(jù)),預(yù)測單個(gè)時(shí)間序列的常規(guī)神經(jīng)網(wǎng)絡(luò)無法從多個(gè)隱藏層中獲得更好效果。預(yù)測問題通常并不那么復(fù)雜!
reps定義了使用多少次訓(xùn)練重復(fù)。如果您想訓(xùn)練一個(gè)單一的網(wǎng)絡(luò),則可以使用reps=1,有大量結(jié)果證據(jù)表明這樣效果一般。默認(rèn)值reps=20是訓(xùn)練速度和性能之間的折衷,但是您可以承受的重復(fù)次數(shù)越多越好。當(dāng)重新訓(xùn)練網(wǎng)絡(luò)時(shí),它們不僅有助于模型的性能,而且還有助于結(jié)果的穩(wěn)定性。
lags允許您選擇網(wǎng)絡(luò)考慮的自回歸滯后。如果未提供此參數(shù),則網(wǎng)絡(luò)使用lag 1到lagm,即序列的季節(jié)。
lags=1:24
keep=c(rep(TRUE,12), rep(FALSE,12)))
lags=1:24, sel.lag=FALSE
在第一種情況下,滯后(1,2,4,7,8,9,10,11,12,13,18,21,23,24)被保留。在第二種情況下,保留所有1-12,其余13-24被測試是否保留。
神經(jīng)網(wǎng)絡(luò)在建模趨勢方面并不出色。因此,在對趨勢進(jìn)行建模之前將其消除是很有用的。這由參數(shù)處理。如果=0不執(zhí)行任何差分。對于diff=1,執(zhí)行一階差分。同樣,如果=12執(zhí)行12階差分。如果時(shí)間序列是具有季節(jié)性周期12的季節(jié)性序列,則這是季節(jié)性差異。
您可以同時(shí)執(zhí)行=c(1,12)或執(zhí)行任何其他差分。如果=NULL然后代碼自動決定。如果存在趨勢,則使用一階差分。該序列還經(jīng)過季節(jié)性測試。如果存在,則使用-檢驗(yàn)來確定這是確定性的還是隨機(jī)的。如果是后者,則還會添加季節(jié)性差分。
確定性季節(jié)性可以使用季節(jié)性虛擬變量更好地建模。
隱藏的節(jié)點(diǎn)數(shù)可以使用參數(shù)預(yù)設(shè)。默認(rèn)情況下,這使用驗(yàn)證樣本(時(shí)間序列的20%)進(jìn)行測試,或type="cv"使用5倍交叉驗(yàn)證。
auto.type="valid",hd.max=8
鑒于訓(xùn)練神經(jīng)網(wǎng)絡(luò)非常耗時(shí),因此你可以重用已經(jīng)指定/經(jīng)過訓(xùn)練的網(wǎng)絡(luò)。在以下示例中,我們將重用fit1到新的時(shí)間序列。
fit(x, model=fit1)
保留了的模型參數(shù)fit1。如果您只想使用參數(shù),但要對網(wǎng)絡(luò)進(jìn)行訓(xùn)練,則可以使用參數(shù)=TRUE。
觀察兩個(gè)設(shè)置之間的樣本內(nèi)MSE的差異。
最后,您可以使用省略號將參數(shù)直接傳遞給用于訓(xùn)練網(wǎng)絡(luò)的函數(shù)...。
要生成預(yù)測,我們使用函數(shù)(),該函數(shù)需要訓(xùn)練的網(wǎng)絡(luò)對象和預(yù)測范圍h。
print(frc)
plot(frc)
預(yù)測圖以灰色提供了所有集合的預(yù)測。
使用回歸預(yù)測
讓我們假設(shè)我們要使用確定性趨勢來預(yù)測時(shí)間序列。首先,我們構(gòu)造輸入,然后對序列建模。
z
z
# 添加一個(gè)滯后0的回歸因子,并強(qiáng)制它留在模型中
=0) # 不要讓mlp()來刪除隨機(jī)趨勢
輸出反映了包含回歸變量。這在帶有淺藍(lán)色輸入的網(wǎng)絡(luò)圖中反映出來。
plot(fit4)
為了包括更多的滯后,我們擴(kuò)展了xreg.lags:
=0,xreg=z,xreg.lags=list(1:12)
觀察到網(wǎng)絡(luò)中未包含任何變量。我們使用xreg.keep來強(qiáng)制包含這些變量。
=0,xreg=z,xreg.lags=list(1:12),xreg.keep=list(c(rep(TRUE,3),rep(FALSE,9)
顯然,神經(jīng)網(wǎng)絡(luò)不喜歡確定性趨勢!如果我們強(qiáng)制執(zhí)行,它只會保留它。為此,我將嘗試包。
zz
zz[loc,2]
.lags=list(c(0:6),0),xreg.keep=list(rep(FALSE,7),TRUE)
顯然,您可以包含任意數(shù)量的回歸變量。
為了產(chǎn)生預(yù)測,我們使用()函數(shù),但現(xiàn)在使用xreg輸入。方法是從網(wǎng)絡(luò)訓(xùn)練期間使用的相同觀察值開始輸入回歸變量,并根據(jù)需要擴(kuò)展預(yù)測范圍。您
frc.reg
ELM的預(yù)測
使用極限學(xué)習(xí)機(jī)(EML)。默認(rèn)情況下,ELM從一個(gè)非常大的隱藏層(100個(gè)節(jié)點(diǎn))開始,并根據(jù)需要對其進(jìn)行修剪。
print(fit6)
plot(fit6)
網(wǎng)絡(luò)圖有一些黑線和一些灰線。后者被修剪。裝有20個(gè)網(wǎng)絡(luò)(由參數(shù)控制reps)。每個(gè)網(wǎng)絡(luò)可能具有不同的最終連接。
par(mfrow=c(2,2))
for (i in 1:4){plot(fit6,i)}
par(mfrow=c(1,1))
修剪的方式由參數(shù)控制。默認(rèn)選項(xiàng)是使用LASSO回歸(類型=“套索LASSO”)。或者,可以使用“ ridge”進(jìn)行嶺回歸,使用“ step”進(jìn)行逐步OLS,使用“ lm”獲得OLS解決方案而不進(jìn)行修剪。
要進(jìn)行預(yù)測,使用()。
(fit6,h=12)
時(shí)間層次結(jié)構(gòu)
實(shí)現(xiàn)時(shí)間層次結(jié)構(gòu)mlp和elm。
par(mfrow=c(1,2))
plot()
plot()
par(mfrow=c(1,1))
這應(yīng)該使您可以進(jìn)行神經(jīng)網(wǎng)絡(luò)的時(shí)間序列預(yù)測。
最受歡迎的見解
1.用于NLP的:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類
2.中利用長短期記憶模型LSTM進(jìn)行時(shí)間序列預(yù)測分析 – 預(yù)測電力消耗數(shù)據(jù)
3.在Keras中使用LSTM解決序列問題
4.中用機(jī)器學(xué)習(xí)分類預(yù)測銀行客戶流失模型
5.R語言多元 GARCH 模型時(shí)間序列預(yù)測
6.在r語言中使用GAM(廣義相加模型)進(jìn)行電力負(fù)荷時(shí)間序列分析
7.R語言中ARMA,ARIMA(Box-)神經(jīng)網(wǎng)絡(luò)預(yù)測r程序,和模型用于預(yù)測時(shí)間序列數(shù)
8.R語言估計(jì)時(shí)變VAR模型時(shí)間序列的實(shí)證研究分析案例
9.用廣義加性模型GAM進(jìn)行時(shí)間序列分析