回归预测 基于ELMAN递归神经网络预测及其matlab代码实现

article/2025/9/24 2:07:47

文章目录

  • 1. ELMAN神经网络的简介和算法描述
    • 1.1 Elman网络介绍
    • 1.2 Elman结构组成
  • 1.3 ELMAN训练界面的参数解读
  • 2. 建立ELMAN神经网络的步骤
  • 3. 编写MATLAB代码
  • 4. ELMAN程序运行结果
    • 4.1 各层的神经元个数的确定过程
    • 4.2 预测值和真实值的误差计算(SSE、MAE、MSE、RMSE、MAPE)
    • 4.3 Elman网络预测的分析图像
  • 5. 小结
  • 6. MATLAB代码与数据下载地址

1. ELMAN神经网络的简介和算法描述

1.1 Elman网络介绍

神经网络是一个庞大的体系和概念,根据处理信息的不同方式来区分不同的network。比如根据处理信息结果的传递方向,分前馈型与反馈型。前馈型网络会根据输出数值来调整网络的参数,反馈型网络的输入会存在输入或者输出数值的反馈,可以对运算处理过程不断地进行优化。网络的反馈形式决定了网络的动态运算特点,递归神经网络ELMAN和前面所介绍的三层BP神经网络相比,增加了一个承接层,可以理解成延时算子,作用是让网络存在记忆功能,更好地适应数据输入的动态变化。

1.2 Elman结构组成

在这里插入图片描述

ELMAN的构造分为四层神经元:输入层、隐含层、承接层以及输出层(在使用智能算法优化ELMAN的参数时,理解ELMAN的结构将有所帮助)。

a). 输入层、输出层的神经元节点个数:
输入层的神经元数量与输入数据特征的维数是相等的,输出层的神经元节点数量也等同于输出数据标签的维度,这与BP神经网络一样。

b). 隐含层的神经元节点个数:
不管在BP还是ELMAN,或者其他的神经网络,隐含层的神经元个数都不是固定的。如果选择的隐含层神经元个数较少时,就会导致网络的学习程度减小甚至无法学习。节点个数较多时,则会导致网络训练的过程变慢,也很难得出预计的情况。只有当隐含层神经元数量只有控制在一个合理的范围内,才能使得网络模型好的进行学习运算。
通常的做法是根据以下公式来推出隐含层节点数目的范围,在范围之内根据训练误差最小(分类问题则取准确率最高或者误差率最低)的原则来确定最佳的隐含层节点数目。

h = m + n + a h=\sqrt{m+n}+a h=m+n +a

式中,h为隐含层节点个数,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的常数。BP神经网络确定隐含层节点也通常采用该式。

c). 承接层的神经元节点个数:
承接层也叫做上下文层和状态层,主要功能是用来记忆隐含层上一个时间点的输出数值。所以承接层的神经元个数与隐含层相同,确定方法为:先根据训练误差最小确定最佳的隐含层神经元节点,再得到承接层的神经元节点个数。

1.3 ELMAN训练界面的参数解读

在这里插入图片描述

2. 建立ELMAN神经网络的步骤

1.读取数据
2. 划分训练集、测试集
3. 数据归一化
4. 获取输入层节点、输出层节点个数
5. 确定网络层与层之间的传递函数和训练算法
6. 构建最佳隐含层节点(承接层节点)的ELMAN神经网络
7. 训练网络
8. 网络测试
9. 对ELMAN的预测值与实际值进行误差分析
10. 打印预测结果和误差表格

3. 编写MATLAB代码

3.1 读取数据
采用深度学习常用的建筑物能源数据集进行预测实验,数据是EXCEL格式,形式为:

样本序号输入指标1输入指标2输出指标
1-
2-
-
n-

EXCEL的读取命令为(对应EXCEL的工作簿名,工作表Sheet名,单元格范围):

%% 读取数据
data=xlsread('数据.xlsx','Sheet1','A1:N252'); %%使用xlsread函数读取EXCEL中对应范围的数据即可  %输入输出数据
input=data(:,1:end-1);    %data的第一列-倒数第二列为特征指标
output=data(:,end);  %data的最后面一列为输出的指标值

3.2 划分训练集测试集
分层抽取即可,通过程序获取样本总数N,设置测试样本数目testNum,训练样本数为N-testNum。

N=length(output);   %全部样本数目
testNum=30;   %设定测试样本数目
trainNum=N-testNum;    %计算训练样本数目

3.3 数据归一化
采用MATLAB自带的mapminmax函数,可以很方便的设置归一化的范围为[-1,1],[0,1]等(注意如果MATLAB安装了LSSVM的工具包,会与mapminmax函数发生冲突,在添加的路径中去掉LSSVM路径即可)

%% 数据归一化
%归一化到0,1之间,归一化可以消除特征指标的量纲和数量级的影响
[inputn,inputps]=mapminmax(input_train,0,1);  
[outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax('apply',input_test,inputps);

3.4 获取输入层输出层节点的个数
使用size函数,用法为[M,N]=size(A),M对应A的行数,N对应A的列数,size(A,1)返回的M值,size(A,2)返回的N值。指标是列的方向,所以采用N=size(A,2)的写法。

inputnum=size(input,2);
outputnum=size(output,2);

3.5 确定网络的传递函数与训练算法

string={'tansig','purelin'};    %传递函数
func_str='traingdx';    %训练算法

3.6 使用循环遍历范围内的隐含层节点与训练误差情况
因为要找最小的误差,所以初始化训练误差时,将MSE设置较大的数字,用于在循环中确定最佳的隐含层节点。

%确定隐含层节点个数
%采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数
%n为输出层节点个数,a一般取为1-10之间的整数
MSE=1e+5; %初始化训练误差

3.7 训练网络

%% 构建最佳隐含层节点(承接层节点)的ELMAN神经网络
net=newelm(inputn,outputn,hiddennum_best,string,func_str);% 网络参数
net.trainParam.epochs=1000;         % 训练次数
net.trainParam.lr=0.01;                   % 学习速率
net.trainParam.goal=0.0001;        % 训练目标最小误差%% 训练网络
net=train(net,inputn,outputn);

3.8 网络测试与误差分析

%% 网络测试
an=sim(net,inputn_test); %用训练好的模型进行仿真
test_simu=mapminmax('reverse',an,outputps); % 预测结果反归一化%% 对ELMAN的预测值与实际值进行误差分析
error=test_simu-output_test;      %预测值和真实值的误差%% 计算误差指标
SSE=sum(error.^2);  %误差平方和
MAE=sum(abs(error))/len;   %平均绝对误差
MSE=error*error'/len;  %均方误差
RMSE=MSE^(1/2);   %均方误差根
MAPE=mean(abs(error./output_test));  %平均百分比误差

4. ELMAN程序运行结果

4.1 各层的神经元个数的确定过程

注意:隐含层节点数=承接层的神经元节点数

在这里插入图片描述

4.2 预测值和真实值的误差计算(SSE、MAE、MSE、RMSE、MAPE)

在这里插入图片描述

4.3 Elman网络预测的分析图像

  1. 预测值和真实值的对比图像
    在这里插入图片描述
  2. 预测值与实际值的误差图像
    在这里插入图片描述
  3. 训练集、验证集、测试集和总体的均方误差随训练次数的变化图像
    注:小圆圈位置代表终止的训练次数(即代数)处的均方误差
    在这里插入图片描述
  4. Elman各阶段的训练图像
    对三个图的解释:(1)梯度随训练的进行而发生减小,(2)在后期(149代)发生过拟合现象,连续6次过拟合,终止网络训练,(3)学习速率lr随训练的进行发生变化,减小。从前面3的train、test、validation来看,三个部分的训练性能变化一致,在134代训练达到最佳的训练效果(performance最小为0.04517),说明训练是合格的。过拟合现象在训练中无法避免,MATLAB进行Elman训练时,默认发生连续6次过拟合则停止训练,可设置过拟合连续的最大次数停止准则。
    在这里插入图片描述

5. 小结

  1. Elman神经网络的结构相比BP神经网络多了一个承接层,能对动态变化的信息进行处理。
  2. 从Elman的四层结构来看,Elman有很好的自适应和学习能力,以及高并行度。
  3. 本篇将Elman神经网络的搭建思路和关键代码表述清楚,供大家参考和学习。如有问题,欢迎留言交流。
  4. 若有不恰当的地方,恳请码友指正。

6. MATLAB代码与数据下载地址

CSDN下载代码

https://download.csdn.net/download/qq_57971471/87730154


http://chatgpt.dhexx.cn/article/ffeahinr.shtml

相关文章

Elman神经网络介绍以及Matlab实现

Elman神经网络介绍 1.特点 Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特性的能力,增强了…

数据库命名规范--通用

分段式的 1.1 基本命名原则 以下基本原则适用于所有数据库对象命名,如无特别说明则为强制规范。规范:遵循行业规范 当有相关国家/行业强制性数据结构标准规范存在时,用于存储某业务数据的业务表在表名命名上原则上应该遵从标准规定&#xf…

数据库命名规范

数据库命名规范 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术:SQL Server 2014 Management Studio 作者:朱海恩 撰写时间:2019年7月12日 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…

【数据库】命名规范

鸣谢: 命规范_码农书生的博客-CSDN博客_数据库字段名称命名规则一、数据库命名规范1.1 数据库命名规范采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线_组成,命名简洁明确,多个单词用下划线_分隔,一个项目一个数据库&…

ESP8266 WIFI 模块串口调试过程-实现通过互联网实现数据远程传输(结尾含驱动代码链接)

一、 ESP8266 WIFI模块调试(串口发送AT指令调试)。 ESP8266 WIFI模块的调试算是最复杂的了,虽然通信是简单的串口通信,但是要设置ESP8266连接服务器并稳定无误的将数据上传,还是非常不容易的。 在前期模块调试阶段我…

串口转无线WiFi模块——WizFi210-EVB操作手册

1. 产品介绍 特点 - 通过串行主机接口,进行WiFi连接 - 快速开机时间:少于20毫秒 - 超低功耗,通过动态电源管理(待机模式34μA) - 速度高达to11Mbps(802.11b)的标准的802.11b/g/n接入点 - 安全…

sever串口wifi拓展板_什么是串口WIFI模块

展开全部 串口WiFi模块多是以邮票孔的62616964757a686964616fe59b9ee7ad9431333365646263形式作为管脚引出控制引脚,主要采取焊接的方式来实现接入电路控制板。 串口WiFi模块是多种WiFi模块中的一类,功能是将串口或TTL电平转换为符合Wi-Fi无线网络通信标…

【沧海拾昧】WiFi串口通信ESP8266模块基本介绍(附野火WiFi透传实例)

#C0104 沧海茫茫千钟粟,且拾吾昧一微尘 ——《沧海拾昧集》CuPhoenix 【阅前敬告】 沧海拾昧集仅做个人学习笔记之用,所述内容不专业不严谨不成体系 【如有问题必是本集记录有谬,切勿深究】 目录 前言一、ESP8266模块基本连线二、ESP8266固件…

ESP8266串口WiFi模块

参考和学习《ESP8266串口WIFI模块的基本使用》点击打开链接 ESP8266是一款超低功耗的UART-WiFi 透传模块,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。 把硬件联网之后,就再也不是“玩单机”了。配合服务器端的Socket网络编程,可以…

教你E103-W10串口转WiFi模块的无线透传应用教程

以下为E103-W10作为 softAP实现 UDP串口服务器无线数据透传的举例,E103-W10作为 station 可同理实现透传。 1.透传 默认仅在TCP client单连接或UDP传输模式时,支持透传。 1.1.TCP Client 单连接透传 1.配置WiFi模式 使用指令ATCWMODE3//SoftAPStati…

ESP32小网关应用,嵌入式串口转以太网,支持蓝牙+wifi

提示:今天分享的ESP32小网关,是深圳市启明云端有限公司推出的基于ESP32系列的嵌入式串口转以太网模块,模块内部集成了优化过的TCP/IP协议栈的WT32-ETH01模块 WT32-ETH01-基于ESP32的小网关 提示:ESP32系列IC是集成了2.4GHz Wi-Fi…

如何测试WizFi210的”串口转无线”功能?

该文章给大家介绍串口模块WizFi210的快速启动指导,如何测试WizFi210的”串口转无线”功能。 首先要给大家说明的是,本文描述的是在下列环境中配置串口模块WizFi210时所需要的步骤: 1. AP:使用WPA Personal或临时密钥完整性协议(T…

rs232/485转WiFi串口转换服务器 Modbus RTU转tcp协议

大家好,我们知道传统工业上常用的是RS232和RS485信号来控制设备,而现在,我们已经进入了互联网时代,物联网时代,所有的设备都可以上网,而传统的232设备如何上网呢? 在这里,我推荐大家…

ESP8266-12F WIFI转串口模块底板设计

一、ESP8266-12F模块简介 ESP8266-12F 是ESP8266-12的增强版,完善外围电路,四层板板工艺,增强阻抗匹配,信号输出更佳,无论是稳定性还是抗干扰能力,PCB天线经过专业实验室测试,完美匹配&#xff…

串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理

SimpleWiFi串口WiFi模块一键配置功能 概述 目前,在嵌入式领域,智能家居、智能工业、智能公交等等控制中,WiFi已经成为了一种普遍被采用的技术。 在智能工业控制,或者智能家居的主控系统中。单片机,成为了中控系统的控…

调试wifi转串口的板子成功了

今天下班回到家就开始调我在淘宝上买的wifi转串口的板子,到目前为止算是调通了。回头就是编写arduino的串口通信程序了。这样的话,我的手机智能家局系统很快就可以完成了。下边是调试wifi转串口板子的情况,拿来和大家分享。 大体上的调试思路…

wifi转串口

wifi转串口 ZLAN7146是一款wifi转串口的wifi串口服务器。该串口服务器可以方便地使得串口设备连接到WIFI无线网络,实现串口设备的无线化网络升级。RS232接口支持全双工、不间断通信;RS485内嵌485防雷保护。wifi支持STA模式连接到无线路由器,或…

物联网工业串口转WiFi模块 无线路由WiFi模块的选型

伴随着物联网的发展,最初的两个机器之间通过硬件直接通信的物理层到通过硬件地址再局域网中进行通信的数据链路层已经远远不能满足于现代人们生活以及各行给业生产的需求。逐渐结合高性能,高质量的网络层和应用层。实现智能终端数据采集,数据…

串口转无线网模块:WizFi630 快速入门指导

WIZnet研发的WizFi630,能有效实现串口转无线功能,它兼容 IEEE 802.11 b/g/n,支持3个以太网端口(10/100 高速以太网) 和2个UART口 ,内嵌全套网络协议栈和相关安全网络协议,并且配置简单,具有极好的易用性。以下为对其的…

【常用模块】ESP8266 WIFI串口通信模块使用详解(实例:附STM32详细代码)

物联网,万物互联。这里涉及到的最基本的东西就是如何将所有的物联网设备连接在一起。最简单、最广泛使用的就是互联网。 ESP8266 WIFI串口通信模块应该是使用最广泛的一种WIFI模块之一了。为什么呢? 因为ESP8266模块是一款高性能的WIFI串口模块&#x…