Elman反馈网络 预测 解决时间序列问题

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分类、聚类、拟合、模式识别、时间序列

你可能感兴趣的:(神经网络)