一、文化算法及BP神经网络简介
1 文化粒子群算法原理
本文提出的文化粒子群算法采用文化算法的双层演化结构。[4]算法包含两个进化空间, 一个是由具体个体组成的群体空间;另一个是由在进化过程中获取的经验和知识组成的信念空间, 其演化框架如图1所示。其中, 群体空间是算法进行问题求解的主空间, 通过演化操作和性能评价进行自身的迭代求解, 形成个体经验, 并通过“accept () ”函数将个体经验传递到信念空间, 信念空间将接收到的个体经验, 不断地进行自身的性能评价与演化, 形成群体经验。信念空间通过“influence () ”函数对群体空间的个体行为规则进行修改, 以使群体空间中得到更高的进化效率。
文化算法总体上包括三大元素:种群空间 (population space) 、信念空间 (belief space) 和沟通渠道 (communication channel) , 其中沟通渠道又包括:接受函数 (acceptance function) 、更新函数 (update function) 、影响函数 (influence function) 。初始化种群空间、信念空间及沟通渠道后, 通过性能函数 (performance function) 评价种群空间中的个体适应值。将种群空间个体在进化过程中所形成的个体经验, 通过接受函数 (acceptance function) 传递给信念空间, 信念空间将收到的个体经验按一定的规则进行比较优化, 形成群体经验, 并根据新获取的个体经验通过更新函数更新现有的信念空间。信念空间再用更新后的群体经验通过影响函数 (Influence Function) 来对种群空间中个体的行为规则进行修改, 进而高效地指引种群空间的进化。选择函数 (Select Function) 从现有种群中选择一部分个体作为下代个体的父辈, 进行下一轮的迭代直至满足终止条件。
图1 文化粒子群算法的基本框架
由于采用了文化算法的双层演化结构, 本文提出的文化粒子群算法不仅具有较高的运行效率, 而且具有很好的全局搜索能力。算法中群体空间的粒子不但通过跟踪个体极值和全局极值来更新自己, 实现群体的演化, 而且通过不断与信念空间中优秀个体的交互, 加快群体的收敛速度。
3 基于文化粒子群的BP神经网络 3.1 基于文化粒子群的BP神经网络优化
前馈神经网络的各神经元只接受前一级输入, 并输出到下一级, 不存在反馈, 可用一有向无环路图代表, 前馈神经网络结构如图2所示。前馈神经网络结构上是分层的, 第一层神经元只与第二层神经元相联, 第二层又与其下一层神经元相连, 依次连接, 组成一个完整的神经网络。前馈神经网络的第一层称为输入层 (Input layer) , 最后一层称为输出层 (Output layer) , 因为输入和输出节点与外界相连, 可直接受外部环境影响, 所以称为可见层 (Visual layer) , 而其它中间层则称为隐含层 (Hidden layer) , 隐含层可由一层或多层构成。
图2 前馈神经网络结构
传统的BP网络的权值更新策略为:通过不断输入训练样本, 根据网络运行特征, 推导出隐层和输出层的权值更新公式进行并逐步迭代, 从而实现网络的学习。该学习算法在对网络的训练和学习过程存在收敛速度慢、容易陷入局部极值等缺点。本文采用文化粒子群算法训练BP网络 (CPSO-BP) 时, 可以同时将权值和阈值进行学习。[5]主要过程为:首先将网络的权值和阈值进行编码, 作为粒子的位置向量, 然后初始化位置向量, 并按照上节的群体演化过程进行搜索和更新, 再将训练好的权值和阈值提供给网络, 进行误差的反向传播。
3.2 基于文化粒子群的BP神经网络的实现
首先进行初始化设置, 群体空间和信念空间的种群大小设置为:群体规模n=30, 惯性权因子ω=0.9, 加速因子c1=c2=2, 微粒子最小位置值xmin=0, 最大位置值xmax=4.0, 微粒子最小速度值vmin=-4.0, 最大速度值vmax=4.0。第二, 基于随机键编码初始化粒子的位置和速度。第三, 根据群体空间粒子位置和训练样本, 计算粒子的实际输入和适应值函数。第四, 更新信念空间粒子位置和训练样本, 并计算粒子的实际输入和适应值函数。第五, 判断若iter%Acc=0时, 进行接受操作。第六, 更新群体空间粒子的位置和速度, 并检验粒子的速度和位置是否越界, 若是, 调整速度和位置。第七, 计算群体空间中各粒子的实际输入和适应值函数。第八, 更新信念空间粒子的位置和速度, 并检验粒子的速度和位置是否越界, 若是, 调整速度和位置。第九, 计算信念空间中粒子的的实际输入和适应值函数。第十, 判断若iter%Inf=0时, 进行影响操作。第十, 当误差达到最初设定值或最大迭代次数时, 输出对应的调度方案和目标值;否则, 令iter=iter+1, 返回第3步。
二、部分源代码
% 清除和加载数据
clear;
data=JustLoad();
warning(‘off’);
% 输入(训练和测试)
inputs=rescale(data.TrainInputs)’;
TstInputs=rescale(data.TestInputs)’;
% 目标(训练和测试)
targets=rescale(data.TrainTargets)’;
TstTargets=rescale(data.TestTargets)’;
sizenn=size(inputs);sizenn=sizenn(1,1);
% 神经元数量----------------------
n = 12;
%----------------------------------------
% ‘trainlm’ Levenberg-Marquardt
% ‘trainbr’ Bayesian Regularization (good)
% ‘trainbfg’ BFGS Quasi-Newton
% ‘trainrp’ Resilient Backpropagation
% ‘trainscg’ Scaled Conjugate Gradient
% ‘traincgb’ Conjugate Gradient with Powell/Beale Restarts
% ‘traincgf’ Fletcher-Powell Conjugate Gradient
% ‘traincgp’ Polak-Ribi茅re Conjugate Gradient
% ‘trainoss’ One Step Secant (good)
% ‘traingdx’ Variable Learning Rate Gradient Descent
% ‘traingdm’ Gradient Descent with Momentum
% ‘traingd’ Gradient Descent
% 创建神经网络 ----------------------------
net = feedforwardnet(n,‘traingdx’);
%---------------------------------------------
% 为此数据集配置神经网络
net = configure(net, inputs, targets);
%当前的 NN 权重和偏差
getwb(net);
% 当前 NN 的 MSE 错误
error = targets - net(inputs);
calc = mean(error.^2)/mean(var(targets’,1));
%为错误创建句柄
h = @(x) NMSE(x, net, inputs, targets);
%%自然灵感部分
[x, err_ga] = ca(h, sizenn*n+n+n+1);
%------------------------------------------------
net = setwb(net, x’);
%优化的 NN 权重和偏差
getwb(net);
%优化 NN 的误差
error = targets - net(inputs);
calc = mean(error.^2)/mean(var(targets’,1));
%-----------------------------------------
Outputs=net(inputs);
TestOutputs=net(TstInputs);
%训练
TrMSE=mse(targets,Outputs);
TrRMSE=sqrt(TrMSE);
TrMAE=mae(targets,Outputs);
TrCC= corrcoef(targets,Outputs);
TrR_Squared=TrCC*TrCC;
% 测试
TsMSE=mse(TstTargets,TestOutputs);
TsRMSE=sqrt(TsMSE);
TsMAE=mae(TstTargets,TestOutputs);
TsCC = corrcoef(TstTargets,TestOutputs);
TsR_Squared=TsCC*TsCC;
%统计数据
%训练
fprintf(‘Training “MSE” Is = %0.4f.\n’,TrMSE)
fprintf(‘Training “RMSE” Is = %0.4f.\n’,TrRMSE)
fprintf(‘Training “MAE” Is = %0.4f.\n’,TrMAE)
fprintf(‘Training “Correlation Coefficient” Is = %0.4f.\n’,TrCC(1,2))
% fprintf(‘Training “R_Squared” Is = %0.4f.\n’,TrR_Squared(1,2))
% Test
fprintf(‘Testing “MSE” Is = %0.4f.\n’,TsMSE)
fprintf(‘Testing “RMSE” Is = %0.4f.\n’,TsRMSE)
fprintf(‘Testing “MAE” Is = %0.4f.\n’,TsMAE)
fprintf(‘Testing “Correlation Coefficient” Is = %0.4f.\n’,TsCC(1,2))
% fprintf(‘Testing “R_Squared” Is = %0.4f.\n’,TsR_Squared(1,2))
% Plots
figure;
subplot(2,2,1)
plot(targets,‘linewidth’,2); title(‘训练’);
hold on;
plot(Outputs,‘linewidth’,2);;legend(‘目标’,‘输出’);
subplot(2,2,2)
plot(TstTargets,‘linewidth’,2); title(‘测试’);
hold on;
plot(TestOutputs,‘linewidth’,2);;legend(‘目标’,‘输出’);
subplot(2,2,3)
[population2,gof] = fit(targets’,Outputs’,‘poly3’);
plot(targets’,Outputs’,‘o’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘k’,…
‘MarkerFaceColor’,[0.9,0.9,0.1]);
title([‘训练R = ’ num2str(1-gof.rmse)]);xlabel(‘目标’);ylabel(‘输出’);
hold on
plot(population2,‘k-’,‘predobs’);xlabel(‘目标’);ylabel(‘输出’);
hold off
subplot(2,2,4)
[population2,gof] = fit(TstTargets’,TestOutputs’,‘poly3’);
plot(TstTargets’,TestOutputs’,‘o’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘r’,…
‘MarkerFaceColor’,[0.9,0.9,0.1]);
title(['测试R = ’ num2str(1-gof.rmse)]);xlabel(‘目标’);ylabel(‘输出’);
hold on
plot(population2,‘r-’,‘predobs’);xlabel(‘目标’);ylabel(‘输出’);
hold off
三、运行结果
四、matlab版本及参考文献
1 matlab版本
a
2 参考文献
[1]高胜利.基于文化粒子群网络优化算法的医学图像研究[J].南通航运职业技术学院学报. ,12(03)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
如果觉得《【BP回归预测】基于matlab文化算法优化BP神经网络数据回归预测【含Matlab源码 2124期】》对你有帮助,请点赞、收藏,并留下你的观点哦!