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

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

相关文章
|
1月前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
197 2
|
17天前
|
机器学习/深度学习 并行计算 数据挖掘
R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域
【10月更文挑战第21天】R语言是一种强大的统计分析工具,广泛应用于数据分析和机器学习领域。本文将介绍R语言中的一些高级编程技巧,包括函数式编程、向量化运算、字符串处理、循环和条件语句、异常处理和性能优化等方面,以帮助读者更好地掌握R语言的编程技巧,提高数据分析的效率。
35 2
|
17天前
|
数据采集 数据可视化 数据挖掘
R语言与Python:比较两种数据分析工具
R语言和Python是目前最流行的两种数据分析工具。本文将对这两种工具进行比较,包括它们的历史、特点、应用场景、社区支持、学习资源、性能等方面,以帮助读者更好地了解和选择适合自己的数据分析工具。
22 2
|
27天前
|
机器学习/深度学习 算法 数据挖掘
基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了基于分组卷积神经网络(GroupCNN)和灰狼优化(GWO)的时间序列回归预测算法。算法运行效果良好,无水印展示。使用Matlab2022a开发,提供完整代码及详细中文注释。GroupCNN通过分组卷积减少计算成本,GWO则优化超参数,提高预测性能。项目包含操作步骤视频,方便用户快速上手。
|
29天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种基于WOA优化的GroupCNN分组卷积网络时间序列预测算法。使用Matlab2022a开发,提供无水印运行效果预览及核心代码(含中文注释)。算法通过WOA优化网络结构与超参数,结合分组卷积技术,有效提升预测精度与效率。分组卷积减少了计算成本,而WOA则模拟鲸鱼捕食行为进行优化,适用于多种连续优化问题。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
该算法结合了遗传算法(GA)与分组卷积神经网络(GroupCNN),利用GA优化GroupCNN的网络结构和超参数,提升时间序列预测精度与效率。遗传算法通过模拟自然选择过程中的选择、交叉和变异操作寻找最优解;分组卷积则有效减少了计算成本和参数数量。本项目使用MATLAB2022A实现,并提供完整代码及视频教程。注意:展示图含水印,完整程序运行无水印。
|
6月前
|
监控 安全 数据可视化
R语言在员工上网行为监控中的数据分析
本文讲述了如何使用R语言分析员工上网行为以提升企业网络安全。通过收集网络流量和访问记录数据,利用R进行读取、分析和可视化,例如查看访问时长分布和热门网站。此外,文中还介绍了一个自动将监控数据提交到网站的R脚本,通过定时任务实现数据的持续更新和管理,及时发现并应对安全风险,增强网络安全性。
302 3
|
2月前
|
机器学习/深度学习 自动驾驶 搜索推荐
深度学习之探索神经网络、感知器与损失函数
在当今的数字化时代,深度学习作为一种强大的机器学习技术,正在迅速改变着我们的生活方式。无论是智能推荐系统、自动驾驶车辆还是语音识别应用,深度学习都在背后默默地发挥作用。
46 1
|
2月前
|
数据采集 算法 搜索推荐
R语言营销数据分析:使用R进行客户分群的实践探索
【9月更文挑战第1天】R语言以其强大的数据处理和统计分析能力,在金融数据分析、营销数据分析等多个领域发挥着重要作用。通过R语言进行客户分群,企业可以更好地理解客户需求,制定精准的营销策略,提升市场竞争力和客户满意度。未来,随着大数据和人工智能技术的不断发展,R语言在营销数据分析中的应用将更加广泛和深入。
|
3月前
|
数据采集 自然语言处理 监控
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
本文介绍了一个基于Python Django框架开发的新媒体网络舆情数据爬取与分析系统,该系统利用Scrapy框架抓取微博热搜数据,通过SnowNLP进行情感分析,jieba库进行中文分词处理,并以图表和词云图等形式进行数据可视化展示,以实现对微博热点话题的舆情监控和分析。
129 2
【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析