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月前
|
机器学习/深度学习 数据采集 存储
时间序列预测新突破:深入解析循环神经网络(RNN)在金融数据分析中的应用
【10月更文挑战第7天】时间序列预测是数据科学领域的一个重要课题,特别是在金融行业中。准确的时间序列预测能够帮助投资者做出更明智的决策,比如股票价格预测、汇率变动预测等。近年来,随着深度学习技术的发展,尤其是循环神经网络(Recurrent Neural Networks, RNNs)及其变体如长短期记忆网络(LSTM)和门控循环单元(GRU),在处理时间序列数据方面展现出了巨大的潜力。本文将探讨RNN的基本概念,并通过具体的代码示例展示如何使用这些模型来进行金融数据分析。
396 2
|
1天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
101 80
|
15天前
|
机器学习/深度学习 算法 Python
基于BP神经网络的金融序列预测matlab仿真
本项目基于BP神经网络实现金融序列预测,使用MATLAB2022A版本进行开发与测试。通过构建多层前馈神经网络模型,利用历史金融数据训练模型,实现对未来金融时间序列如股票价格、汇率等的预测,并展示了预测误差及训练曲线。
|
1月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
110 1
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
58 3
|
2月前
|
机器学习/深度学习 数据可视化
KAN干翻MLP,开创神经网络新范式!一个数十年前数学定理,竟被MIT华人学者复活了
【10月更文挑战第12天】MIT华人学者提出了一种基于Kolmogorov-Arnold表示定理的新型神经网络——KAN。与传统MLP不同,KAN将可学习的激活函数放在权重上,使其在表达能力、准确性、可解释性和收敛速度方面表现出显著优势,尤其在处理高维数据时效果更佳。然而,KAN的复杂性也可能带来部署和维护的挑战。论文地址:https://arxiv.org/pdf/2404.19756
60 1
|
4月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。
|
4月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
124 9
|
7月前
|
机器学习/深度学习 算法
ATFNet:长时间序列预测的自适应时频集成网络
ATFNet是一款深度学习模型,融合时域和频域分析,捕捉时间序列数据的局部和全局依赖。通过扩展DFT调整周期性权重,结合注意力机制识别复杂关系,优化长期预测。模型包含T-Block(时域)、F-Block(频域)和权重调整机制。实验证明其在时间序列预测任务中表现优越,已发布于arXiv并提供源代码。
277 4
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
时间序列预测:探索性数据分析和特征工程的实用指南
时间序列分析在数据科学和机器学习中广泛应用于预测,如金融、能源消耗和销售。随着技术发展,除了传统统计模型,机器学习(如树模型)和深度学习(如LSTM、CNN和Transformer)也被应用。探索性数据分析(EDA)是预处理关键步骤,它通过Pandas、Seaborn和Statsmodel等Python库进行。本文展示了时间序列分析模板,包括描述性统计、时间图、季节图、箱形图、时间序列分解和滞后分析。使用Kaggle的小时能耗数据集,展示了如何通过这些方法揭示数据模式、季节性和趋势,为特征工程提供见解。
137 3