Elman反馈网络 预测 解决时间序列问题
% 清理
close all
clear,clc
% 原始数据
data =[0.4413 0.4707 0.6953 0.8133;...
0.4379 0.4677 0.6981 0.8002;...
0.4517 0.4725 0.7006 0.8201;...
0.4557 0.4790 0.7019 0.8211;...
0.4601 0.4811 0.7101 0.8298;...
0.4612 0.4845 0.7188 0.8312;...
0.4615 0.4891 0.7201 0.8330];
rng('default')
rng(2);
for i=1:4
P=[data(1:3,i),data(2:4,i),data(3:5,i)];
T=[data(4,i),data(5,i),data(6,i)];
net=elmannet(1:3,20); % 创建Elman网络 1:3延迟的行向量,20隐藏层大小
net=init(net); % 初始化
net=train(net,P,T); % 训练
% 测试
test_P=data(4:6,i);
y(i)=sim(net,test_P); % 仿真
end
fprintf('真实值:\n');
disp(data(7,:));
fprintf('预测值:\n');
disp(y);
fprintf('误差:\n');
disp((y-data(7,:))./y);
fprintf('平均误差mse:\n');
disp(mean(abs(y-data(7,:))))
预测股价
%% 清理
close all
clear,clc
%% 加载数据
load stock1
% Name Size Bytes Class Attributes
%
% stock1 1x280 2240 double
% 归一化处理
mi=min(stock1);
ma=max(stock1);
stock1=(stock1-mi)/(ma-mi);
% 划分训练数据与测试数据:前140个维训练样本,后140个维测试样本
traindata = stock1(1:140);
%% 训练
% 输入
P=[];
for i=1:140-5
P=[P;traindata(i:i+4)];
end
P=P';
% 期望输出
T=[traindata(6:140)];
% 创建Elman网络
threshold=[0 1;0 1;0 1;0 1;0 1];
% net=newelm(threshold,[0,1],[20,1],{'tansig','purelin'});
net=elmannet;
% 开始训练
% 设置迭代次数
net.trainParam.epochs=1000;
% 初始化
net=init(net);
net=train(net,P,T);
% 保存训练好的网络
save stock_net net
%% 使用训练数据测试一次
y=sim(net,P);
error=y-T;
mse(error);
fprintf('error= %f\n', error);
T = T*(ma-mi) + mi;
y = y*(ma-mi) + mi;
plot(6:140,T,'b-',6:140,y,'r-');
title('使用原始数据测试');
legend('真实值','测试结果');
神经网络工具
nntool 神经网络/数据管理工具 可视化界面创建神经网络
nftool分类、聚类、拟合、模式识别、时间序列
Elman反馈网络 预测 解决时间序列问题
最新推荐文章于 2024-08-06 11:48:38 发布