乐趣区

关于算法:R语言中的神经网络预测时间序列多层感知器MLP和极限学习机ELM数据分析报告

原文链接:http://tecdat.cn/?p=23485 

用于 R 语言的多层感知器(MLP)和极限学习机(ELM)进行工夫序列预测。请留神,因为 神经 网络无奈利用 GPU 解决,因而大型网络的训练速度往往很慢。与现有神经网络实现的不同之处在于,R 能够主动设计具备正当预测性能的网络。这减少了神经网络的鲁棒性,但也有助于缩小训练工夫。

应用 MLP 进行预测

应用 R 软件包,您能够生成外推(单变量)预测,也能够蕴含解释变量。

单变量预测

最简略的模式,您只需输出要建模的工夫序列。

fit1 <- MLPfit(Air)
print(fit1)

输入表明后果网络具备 5 个暗藏节点,对其进行了 20 次训练,并应用中位数运算组合了不同的预测。主动生成网络汇合,其训练从不同的随机初始权重开始。此外,它提供了网络中蕴含的输出。

能够应用plot() 取得直观的摘要。

plot(fit1)

灰色的输出节点是自回归,而洋红色的则是确定性输出(在这种状况下为季节性)。如果包含任何其余回归变量,它们将以浅蓝色显示。

该 MLP() 函数承受几个参数来微调生成的网络。该 hd 参数定义了固定数量的暗藏节点。如果是单个数字,则神经元排列在单个暗藏节点中。如果是矢量,则将它们排列成多层。

fit(hd = c(10,5))

稍后咱们将介绍如何主动抉择节点数。依据我的教训(以及来自文献的证据),预测单个工夫序列的惯例神经网络无奈从多个暗藏层中取得更好成果。预测问题通常并不那么简单!

reps 定义了应用多少次训练反复。如果您想训练一个繁多的网络,则能够应用 reps=1,有大量后果证据表明这样成果个别。默认值 reps=20 是训练速度和性能之间的折衷,然而您能够接受的反复次数越多越好。当从新训练网络时,它们不仅有助于模型的性能,而且还有助于后果的稳定性。

lags 容许您选择网络思考的自回归滞后。如果未提供此参数,则网络应用 lag 1 到 lag  m,即序列的节令。

 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 被测试是否保留。

神经网络在建模趋势方面并不杰出。因而,在对趋势进行建模之前将其打消是很有用的。这由参数解决 difforder。如果 difforder=0 不执行任何差分。对于 diff=1,执行一阶差分。同样,如果 difforder=12 执行 12 阶差分。如果工夫序列是具备季节性周期 12 的季节性序列,则这是季节性差别。

您能够同时执行 difforder=c(1,12) 或执行任何其余差分。如果 difforder=NULL 而后代码主动决定。如果存在趋势,则应用一阶差分。该序列还通过季节性测试。如果存在,则应用 Canova-Hansen 测验来确定这是确定性的还是随机的。如果是后者,则还会增加季节性差分。

确定性季节性能够应用季节性虚构变量更好地建模。

暗藏的节点数能够应用参数预设。默认状况下,这应用验证样本(工夫序列的 20%)进行测试,或 type="cv" 应用 5 倍穿插验证。

auto.type="valid",hd.max=8

鉴于训练神经网络十分耗时,因而你能够重用曾经指定 / 经过训练的网络。在以下示例中,咱们将重用 fit1 到新的工夫序列。

fit(x, model=fit1)

保留了的模型参数 fit1。如果您只想应用参数,但要对网络进行训练,则能够应用参数 retrain=TRUE

察看两个设置之间的样本内 MSE 的差别。

最初,您能够应用省略号将参数间接传递给用于训练网络的 函数 ...

要生成预测,咱们应用函数forecast(),该函数 须要训练的网络对象和预测范畴 h

print(frc)

plot(frc)

预测图以灰色提供了所有汇合的预测。

应用回归预测

让咱们假如咱们要应用确定性趋势来预测工夫序列。首先,咱们结构输出,而后对序列建模。

z <- 1:(length()+24) # 我为预测减少了 24 个额定的观测值
z <- cbind(z) # 把它转换成一个列数
            # 增加一个滞后 0 的回归因子,并强制它留在模型中
            difforder=0) # 不要让 mlp()来删除随机趋势

输入反映了蕴含回归变量。这在带有浅蓝色输出的网络图中反映进去。

plot(fit4)

为了包含更多的滞后,咱们扩大了 xreg.lags

difforder=0,xreg=z,xreg.lags=list(1:12)

察看到网络中未蕴含任何变量。咱们应用 xreg.keep 来强制蕴含这些变量。

difforder=0,xreg=z,xreg.lags=list(1:12),xreg.keep=list(c(rep(TRUE,3),rep(FALSE,9)

显然,神经网络不喜爱确定性趋势!如果咱们强制执行,它只会保留它。为此,我将尝试tsutils 包。

 
 zz <- cbind(z, 0)
zz\[loc,2\] <- 1
fitxreg.lags=list(c(0:6),0),xreg.keep=list(rep(FALSE,7),TRUE)

显然,您能够蕴含任意数量的回归变量。

为了产生预测,咱们应用 forecast() 函数,但当初应用 xreg 输出。办法是从网络训练期间应用的雷同察看值开始输出回归变量,并依据须要扩大预测范畴。您

frc.reg <- forecast(fit5,xreg=zz)

ELM 的预测

应用极限学习机(EML)。默认状况下,ELM 从一个十分大的暗藏层(100 个节点)开始,并依据须要对其进行修剪。

print(fit6)

plot(fit6)

网络图有一些黑线和一些灰线。后者被修剪。装有 20 个网络(由参数管制 reps)。每个网络可能具备不同的最终连贯。

par(mfrow=c(2,2))
for (i in 1:4){plot(fit6,i)}
par(mfrow=c(1,1))

修剪的形式由参数管制。默认选项是应用 LASSO 回归(类型 =“套索 LASSO”)。或者,能够应用“ridge”进行岭回归,应用“step”进行逐渐 OLS,应用“lm”取得 OLS 解决方案而不进行修剪。

要进行预测,应用forecast()

forecast(fit6,h=12)

工夫层次结构

实现工夫层次结构mlp 和`elm。`

par(mfrow=c(1,2))
plot(thiMLP)
plot(thiELM)
par(mfrow=c(1,1))

这应该使您能够进行神经网络的工夫序列预测。


最受欢迎的见解

1. 用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类

2.Python 中利用长短期记忆模型 LSTM 进行工夫序列预测剖析 – 预测电力耗费数据

3.python 在 Keras 中应用 LSTM 解决序列问题

4.Python 中用 PyTorch 机器学习分类预测银行客户散失模型

5.R 语言多元 Copula GARCH 模型工夫序列预测

6. 在 r 语言中应用 GAM(狭义相加模型)进行电力负荷工夫序列剖析

7.R 语言中 ARMA,ARIMA(Box-Jenkins),SARIMA 和 ARIMAX 模型用于预测工夫序列数

8.R 语言预计时变 VAR 模型工夫序列的实证钻研剖析案例

9. 用狭义加性模型 GAM 进行工夫序列剖析

退出移动版