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月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
115 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
12天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
|
23天前
|
机器学习/深度学习 算法 JavaScript
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于模糊神经网络的金融序列预测算法matlab仿真
本程序为基于模糊神经网络的金融序列预测算法MATLAB仿真,适用于非线性、不确定性金融数据预测。通过MAD、RSI、KD等指标实现序列预测与收益分析,运行环境为MATLAB2022A,完整程序无水印。算法结合模糊逻辑与神经网络技术,包含输入层、模糊化层、规则层等结构,可有效处理金融市场中的复杂关系,助力投资者制定交易策略。
|
1月前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
2月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
131 9
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
2月前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB 2022a实现时间序列预测,采用CNN-GRU-SAM网络结构,结合鲸鱼优化算法(WOA)优化网络参数。核心代码含操作视频,运行效果无水印。算法通过卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征,全连接层整合输出。数据预处理后,使用WOA迭代优化,最终输出最优预测结果。
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
|
2月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目使用MATLAB 2022a实现时间序列预测算法,完整程序无水印。核心代码包含详细中文注释和操作视频。算法基于CNN-LSTM-SAM网络,融合卷积层、LSTM层与自注意力机制,适用于金融市场、气象预报等领域。通过数据归一化、种群初始化、适应度计算及参数优化等步骤,有效处理非线性时间序列,输出精准预测结果。
|
1月前
|
机器学习/深度学习 数据采集 算法
基于WOA鲸鱼优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本内容介绍了一种基于CNN-LSTM-SAM网络与鲸鱼优化算法(WOA)的时间序列预测方法。算法运行于Matlab2022a,完整程序无水印并附带中文注释及操作视频。核心流程包括数据归一化、种群初始化、适应度计算及参数更新,最终输出最优网络参数完成预测。CNN层提取局部特征,LSTM层捕捉长期依赖关系,自注意力机制聚焦全局特性,全连接层整合特征输出结果,适用于复杂非线性时间序列预测任务。