一、简介
BP神经网络具有很好的拟合非线性函数的能力,但传统BP算法收敛慢,容易陷入局部极小值.不少研究人员从BP神经网络的初始权值和阈值着手,期望通过对初始权值和阈值的优化来提高BP神经网络的性能.对此提出一种改进BP神经网络的算法,使用狼群算法优化BP神经网络的初始权值和阈值,用数据训练BP神经网络后预测函数的输出.最后通过一个非线性函数来验证所提出模型的有效性.
二、源代码
```matlab
%% WPA-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
time = toc;
disp(['用时= ',num2str(time)])
x=zbest;
%% 把最优初始阀值权值赋予网络预测
%% BP网络训练
%网络进化参数
net.trainParam.epochs=100;%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神经网络')
三、运行结果
四、参考文献
[1]李常洪, and 赵伟栋. "基于狼群算法优化的BP神经网络." 科技创新与生产力 000.001():56-58.