1 简介
Elman 神经网络是一种局部递归神经网络,其结构包括输入层、隐含层、承接层和输出层,见图 1。输入层单元起数据输入作用; 输出层单元作线性加权操作; 隐含层单元的传递函数可采用线性或非线性函数。承接层单元用来记忆和储存隐含层单元前一时刻的输出值。承接层与隐含层的特殊连接方式使该网络模型对时序动态数据具有敏感性,因此使得Elman神经网络处理复杂时变数据的能力得到了提升。
2 部分代码
```matlab
clear all
clc
%% bas优化elman网络
%% 自变量个数
x_number=49;
%% 因变量个数
y_number=1;
%% 网络节点个数
inputnum=x_number; % 输入层
hiddennum=50; % 隐含层
outputnum=y_number; % 输出层
iterations=2000; % 迭代次数
%% 导入数据
[data_train,~,raw_train]=xlsread('train.xlsx');
[data_predict,~,raw_predict]=xlsread('predict.xlsx');
%% 自变量
x_train=data_train(2:366,5:end);
x_test=data_train(367:397,5:end);
%% 因变量
y_train=data_train(367:731,6);
y_test=data_predict(2:end,6);
%% 自变量归一化
[x,xn]=mapminmax([x_train;x_test]',-1,1);
trainx=x(:,1:size(x_train,1));
testx=x(:,size(x_train,1)+1:end);
%% 因变量归一化
[trainy,yn]=mapminmax(y_train',-1,1);
%% 维度
global dim
dim=inputnum*hiddennum+hiddennum*hiddennum+outputnum*hiddennum+hiddennum*outputnum+outputnum;
% 用训练的神经网络对测试组数据进行训练
nh=sim(net,testx);
% 网络输出反归一化
BPnh=mapminmax('reverse',nh,yn);
%% 预测值
predict=BPnh';
%% 真实值
real=y_test;
%% 误差
err=(predict-real)./real;
figure(1)
plot(fbest_store)
%% 绘图
figure(2)
subplot(121)
plot(predict,'k-*')
hold on
plot(real,'b--o')
legend('预测值','真实值')
title(['BAS优化ELman神经网络预测误差:',num2str(var(err))])
subplot(122)
plot(err,'o-')
title('BAS优化ELman神经网络预测误差')
```
3 仿真结果
4 参考文献
[1]胡程磊等. "一种基于天牛须优化算法和神经网络的建筑能耗预测方法.".