1 模型
针对于BP神经网络预测模型,收敛速度慢,精度较低,容易陷入局部极小值等缺点,提出了一种粒子群优化BP神经网络预测模型的算法.在该算法中,粒子群优化BP神经网络预测模型的初始权值和阈值,然后训练BP神经网络预测模型并预测.将该算法应用到几个典型的混沌时间序列预测.实验结果表明,该算法明显提高BP神经网络预测模型的收敛速度和预测模型的精度,减少陷入局部极小的可能.
1.1 BP神经网络
1.2 粒子群算法
2 部分代码
%% PSO-BP神经网络 %% 清空环境 clear all; close all; clc; data=xlsread('Test.xlsx','Sheet1','A2:G46');%读取数据 [M,NN]=size(data);%M是样本数,N是变量数 inputn=data(:,1:NN-1)';%训练样本输入 outputn=data(:,NN)';%训练样本输出 %节点个数 inputnum=NN-1;%输入个数 hiddennum=12;%隐藏层 outputnum=1;%输出个数 %构建网络 net=newff(inputn,outputn,hiddennum); tic %% 粒子群 numWolf=60; limit = [-10, 10;]; % 设置位置参数限制(矩阵的形式可以多维) vlimit = [-0.01, 0.01;]; % 设置速度限制 c_1 = 0.8; % 惯性权重 c_2 = 0.5; % 自我学习因子 c_3 = 0.5; % 群体学习因子 N=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum; x = zeros(numWolf,N); % 初始化种群 for i = 1:numWolf x(i,:)=rands(1,N); % fitness(i)=fun(x(i,:),inputnum,hiddennum,outputnum,net,inputn,outputn); end % [xm,LeadWolf] = min(fitness); % ym = x(LeadWolf,:); % globalMin = xm; v = 0.1*rand(numWolf,N); % 初始种群的速度 xm = x; % 每个个体的历史最佳位置 ym = zeros(1, N); % 种群的历史最佳位置 fxm = 100000*ones(numWolf, 1); % 每个个体的历史最佳适应度 fym = 100000; % 种群历史最佳适应度 %% 粒子群工作 iter = 1; end time = toc; disp(['用时= ',num2str(time)]) X=ym; %% BP网络训练 %网络进化参数 net.trainParam.epochs=2000;%bp神经网络的代数 net.trainParam.lr=0.1; %net.trainParam.goal=0.00001; %网络训练 [net,per2]=train(net,inputn,outputn); %% BP网络预测 % load data inputn_test output_test inputn_test=inputn;%测试数据输入 output_test=outputn;%测试数据输出 an=sim(net,inputn_test);%预测 error=(an-output_test);%误差 error_xiangdui=(an-output_test)./output_test;%相对误差 figure(1) plot(error_xiangdui,'ko-') ylabel('相对误差值') title('粒子群优化BP神经网络') figure(2) plot(error,'ro-') ylabel('误差值') title('粒子群优化BP神经网络') figure(3) plot(output_test,'r + -'); hold on; plot(an,'b * -') hold off legend('真实值','预测值'); title('粒子群优化BP神经网络') figure(4) plot( record) xlabel('迭代次数') ylabel('均方差值')
3 仿真结果
4 参考文献
[1]卢辉斌, 李丹丹, 孙海艳. PSO优化BP神经网络的混沌时间序列预测[J]. 计算机工程与应用, 2015, 51(2):224-229.