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

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


用于R语言的多层感知器(MLP)和极限学习机(ELM)进行时间序列预测。请注意,由于神经网络无法利用GPU处理,因此大型网络的训练速度往往很慢点击文末“阅读原文”获取完整代码数据


相关视频

image.png

image.png

与现有神经网络实现的不同之处在于,R可以自动设计具有合理预测性能的网络。这增加了神经网络的鲁棒性,但也有助于减少训练时间。

使用MLP进行预测

使用R软件包,您可以生成外推(单变量)预测,也可以包含解释变量。

单变量预测

最简单的形式,您只需输入要建模的时间序列。

fit1 <- MLPfit(Air)
print(fit1)

40a8af3ee008d58eb0720fd668bbb813.png

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

可以使用plot() 获得直观的摘要 。

plot(fit1)

035fda3de7ea03cc865d2721dda14958.png

点击标题查阅往期内容


【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分享



左右滑动查看更多

fd20151512ff721a264eea121a3cefc4.png

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

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

fit( hd = c(10,5))

b5798dd08c377eebabb0e91216b67b39.png

稍后我们将介绍如何自动选择节点数。根据我的经验(以及来自文献的证据),预测单个时间序列的常规神经网络无法从多个隐藏层中获得更好效果。预测问题通常并不那么复杂!

reps 定义了使用多少次训练重复。如果您想训练一个单一的网络,则可以使用 reps=1,有大量结果证据表明这样效果一般。默认值 reps=20 是训练速度和性能之间的折衷,但是您可以承受的重复次数越多越好。当重新训练网络时,它们不仅有助于模型的性能,而且还有助于结果的稳定性。

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

lags=1:24

a2d33bb123fe60a1c9dc451f6a22b783.png

 keep=c(rep(TRUE,12), rep(FALSE,12)))

ddfcc5838f5ea89459642d3c54bc294c.png

 lags=1:24, sel.lag=FALSE

5706d9740a195af693b03b1d6c1d4c74.png

在第一种情况下,滞后(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

8873e309a98717c28f251ee030dd9394.png

鉴于训练神经网络非常耗时,因此你可以重用已经指定/经过训练的网络。在以下示例中,我们将重用 fit1 到新的时间序列。

fit(x, model=fit1)

c081315789c45642a7a92439cc52336a.png 保留了的模型参数 fit1。如果您只想使用参数,但要对网络进行训练,则可以使用参数 retrain=TRUE

116852ba780226880462913d46e877af.png

观察两个设置之间的样本内MSE的差异。

最后,您可以使用省略号将参数直接传递给用于训练网络的 函数 ...

要生成预测,我们使用函数forecast(),该函数 需要训练的网络对象和预测范围 h

print(frc)

45ca61038c1c4943bd599b90cc2e02d0.png

plot(frc)

07cca3c8a832ecfa0a78d962f4df83c5.png

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

使用回归预测

让我们假设我们要使用确定性趋势来预测时间序列。首先,我们构造输入,然后对序列建模。


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)

640.png

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))

这应该使您可以进行神经网络的时间序列预测。

相关文章
|
2天前
|
机器学习/深度学习 算法
ATFNet:长时间序列预测的自适应时频集成网络
ATFNet是一款深度学习模型,融合时域和频域分析,捕捉时间序列数据的局部和全局依赖。通过扩展DFT调整周期性权重,结合注意力机制识别复杂关系,优化长期预测。模型包含T-Block(时域)、F-Block(频域)和权重调整机制。实验证明其在时间序列预测任务中表现优越,已发布于arXiv并提供源代码。
17 4
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
时间序列预测:探索性数据分析和特征工程的实用指南
时间序列分析在数据科学和机器学习中广泛应用于预测,如金融、能源消耗和销售。随着技术发展,除了传统统计模型,机器学习(如树模型)和深度学习(如LSTM、CNN和Transformer)也被应用。探索性数据分析(EDA)是预处理关键步骤,它通过Pandas、Seaborn和Statsmodel等Python库进行。本文展示了时间序列分析模板,包括描述性统计、时间图、季节图、箱形图、时间序列分解和滞后分析。使用Kaggle的小时能耗数据集,展示了如何通过这些方法揭示数据模式、季节性和趋势,为特征工程提供见解。
14 3
|
4天前
|
机器学习/深度学习 数据可视化 算法
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
R语言神经网络与决策树的银行顾客信用评估模型对比可视化研究
|
4天前
|
机器学习/深度学习 监控 数据可视化
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例2
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例
|
4天前
|
机器学习/深度学习 数据可视化 算法
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例1
R语言SOM神经网络聚类、多层感知机MLP、PCA主成分分析可视化银行客户信用数据实例
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言神经网络模型金融应用预测上证指数时间序列可视化
R语言神经网络模型金融应用预测上证指数时间序列可视化
|
4天前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化|数据分享
R语言软件对房屋价格预测:回归、LASSO、决策树、随机森林、GBM、神经网络和SVM可视化|数据分享
|
4天前
|
数据可视化
R语言大学城咖啡店消费问卷调查数据报告:信度分析、主成分分析可视化
R语言大学城咖啡店消费问卷调查数据报告:信度分析、主成分分析可视化
|
4天前
|
机器学习/深度学习 数据采集 数据可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
R语言电影数据分析:随机森林探索电影受欢迎程度因素、参数调优可视化
|
4天前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
52 0

热门文章

最新文章