粒子群算法优化的BP神经网络回归预测(Matlab)
原创
©著作权归作者所有:来自51CTO博客作者荔枝科研社的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
摘要:
1.BP模型神经网络模型
2.粒子群优化算法(PSO)
3.粒子群算法结合BP神经网络(PSO-BP)
4.程序运行结果
5.代码展示
摘要:
BP神经网络是一种常见的多层前馈神经网络,本文通过粒子群算法(PSO)对BP神经网络的网络参数进行寻优,得到最优化的网络参数,并与未使用PSO的BP网络对同一测试样本进行预测,对比分析并突出PSO-BP的优越性。通过对替换输入与输出后即可满足不同的任务,实现自己想要的功能。
1.BP模型神经网络模型
![粒子群算法优化的BP神经网络回归预测(Matlab)_负荷预测](https://s2.51cto.com/images/blog/202208/02185647_62e902efec83282927.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
![粒子群算法优化的BP神经网络回归预测(Matlab)_神经网络_02](https://s2.51cto.com/images/blog/202208/02185648_62e902f018f8480309.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
2.粒子群优化算法(PSO)
PSO的原理已经介绍的很多了,这里就简单列举一下
PSO 算法中的每个粒子都用位置和速度矢量来描述,其中位置矢量表示问题的可能解,速度矢量表示位置变化的方向和大小。假设粒子总数为 M,则第 n 个粒子在维度 d 中的位置和速度表示如下:
![粒子群算法优化的BP神经网络回归预测(Matlab)_PSO_03](https://s2.51cto.com/images/blog/202208/02185648_62e902f04aca591788.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
每个粒子通过跟踪它们之前的个体最佳位置和群体最佳位置来调整它们的速度和位置,这两个最佳位置表示为:
![粒子群算法优化的BP神经网络回归预测(Matlab)_神经网络_04](https://s2.51cto.com/images/blog/202208/02185648_62e902f0625bf33496.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
PSO 算法的速度和位置更新公式表示为:
![粒子群算法优化的BP神经网络回归预测(Matlab)_matlab_05](https://s2.51cto.com/images/blog/202208/02185648_62e902f09421e35773.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
3.粒子群算法结合BP神经网络(PSO-BP)
BP神经网络的隐藏节点通常由重复的前向传递和反向传播的方式来决定,通过修改或构造训练方式改隐藏的节点数,相应的初始权重和阈值也会随之变化,从而影响网络的收敛和学习效率。 为了减少影响,通过采用基于粒子群算法的BP神经网络模型对权重和阈值的调整进行优化,从而加快网络的收敛速度和提高网络的学习效率。具体的计算流程如下:
![粒子群算法优化的BP神经网络回归预测(Matlab)_神经网络_06](https://s2.51cto.com/images/blog/202208/02185648_62e902f0b092e59713.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
4.程序运行结果
使用PSO-BP和单纯BP同时进行训练和预测,并对比两者在同一预测回归任务上的性能情况,结果表明PSO优化后的BP预测准确度要明显好于没有优化的BP。
![粒子群算法优化的BP神经网络回归预测(Matlab)_神经网络_07](https://s2.51cto.com/images/blog/202208/02185648_62e902f0d41f84107.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184)
5.代码展示
通过替换输入与输出即可实现自己想要的功能,非常方便。
本文仅展示部分代码,完整版代码点这里:
%% 使用PSO优化BP神经网络解决回归预测问题
clc;
clear;
close all;
%% 导入数据
load data.mat; % 可以改成自己的数据
temp = randperm(size(NIR,1)); %打乱数据
%% 设置参数及输入P 输出T ,其中一行为一个样本,一列是一个特征
% 训练输入与输出
P = NIR(temp(1:50),:);
T = octane(temp(1:50),:);
% 测试输入与输出
P_test = NIR(temp(51:end),:);
T_test = octane(temp(51:end),:);
% BP神经网络参数定义
inputnum=size(P,2); %输入层神经元个数
hiddennum=2*inputnum+1; %初始隐层神经元个数
outputnum=size(T,2); %输出层神经元个数
w1num=inputnum*hiddennum; %输入层到隐层的权值个数
w2num=outputnum*hiddennum; %隐层到输出层的权值个数
N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数
%% 定义粒子群优化算法参数
nVar=N; %变量数目
VarSize=[1,nVar]; %变量矩阵大小
VarMin=-0.5; %变量取值下限
VarMax=0.5; %变量取值上限
MaxIt=50; %最大迭代次数
nPop=40; %种群数目
w=1; %惯性权重
wdamp=0.99; %惯性重量降低系数
c1=1.5; %个体学习系数
c2=2.0; %群体学习系数
VelMax=0.1*(VarMax-VarMin); %速度上限
VelMin=-VelMax; %速度下限