1 简介
为了提高 BP 神经网络预测模型对混沌时间序列的预测准确性, 提出了一种基于遗传算法优化 BP 神经网络的改进混沌时间序列预测方法. 利用遗传算法优化 BP 神经网络的权值和阈值, 然后训练 BP 神经网络预测模型以求得最优解, 并将该预测方法应用到几个典型混沌时间序列和实测短时交通流时间序列进行有效性验证. 仿真结果表明, 该方法对股价具有较好的非线性拟合能力和更高的预测准确性.
2 部分代码
clear all
clc
close all
tic
%% 全局变量
global pn
global tn
global R
global S2
global S1
global S
S1 = 12;
%% 数据处理
load data.mat
X=xlsread('数据.xls');
data = [data X(:,end)];
% 85%用于训练,15%进行预测
nn = floor(0.85*size(data,1));
input=data(1:nn,1:3)';
output=data(1:nn,end)';
input_test=data(nn+1:end,1:3)';
output_test=data(nn+1:end,end)';
M =size(input,2); %输入节点个数
N =size(output,2);%输出节点个数
%% 训练数据
p = input;
t = output;
[pn,minp,maxp,tn,mint,maxt] =premnmx(p,t);%归一化
%% 建立神经网络
net = newff(minmax(pn),[S1,1],{'tansig','purelin'});
net.trainParam.show = 50;
net.trainParam.lr = 0.1;
net.trainParam.epochs = 1000;
net.trainParam.goal =1e-10;
[net,tr] = train(net,pn,tn);
%% 遗传操作
R = size(p,1);
S2= size(t,1);
S = R*S1+S1*S2+S1+S2;
aa = ones(S,1)*[-1 1];
popu = 50;
initPpp = initializega(popu,aa,'gabpEval');
gen = 500;
[x,endPop,bPop,trace] = ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...
'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%% 画图迭代图
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
grid on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('迭代数')
ylabel('均方误差')
title('均方误差曲线图')
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
grid on
plot(trace(:,1),trace(:,2),'b-');
xlabel('迭代数')
ylabel('适应度函数值')
title('适应度函数迭代曲线图')
[W1,B1,W2,B2,val] = gadecod(x);
W1;
W2;
B1;
B2;
net.IW{1,1} = W1;
net.LW{2,1} = W2;
net.b{1} = B1;
net.b{2} = B2;
net = train(net,pn,tn);
k = input_test;
kn = tramnmx(k,minp,maxp);
s_bp = sim(net,kn);
s_bp22 = postmnmx(s_bp,mint,maxt);
toc
load gabp.mat
xk=2;
figure
plot(1:length(output_test),output_test,'r-*',1:length(output_test),s_bp22,'b-o','linewidth',xk)
grid on%加网格
legend('真实值','预测值')%图例
title('神经网预测真实值与预测值对比')%标题
xlabel('样本')%横坐标标题
ylabel('成交额')%纵坐标标题
xk = 2;
error2 = abs(s_bp22 - output_test)./output_test.*100;
figure%画图
plot(1:length(error2),error2,'ko-','linewidth',xk)%测试输出与真实值的对比图
grid on%加网格
title('测试样本相对误差图%')%标题
xlabel('样本')%横坐标标题
ylabel('相对误差%')%纵坐标标题
zh_gabp = [output_test ;s_bp22; error2]
save zh_gabp zh_gabp
3 仿真结果
4 参考文献
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
完整代码获取关注微信公众号天天matlab