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