基于遗传算法优化BP神经网络预测和分类MATLAB实现-附代码

基于遗传算法GA优化的BP神经网络预测和分类(含优化前对比)

1. BP神经网络预测原理简介

BP 神经网络是一种多层前馈神经网络,常用的为输入层-单隐含层-输出层的三层结构,如下图所示。
在这里插入图片描述
BP神经网络训练的主要思想:输入的信号特征数据先映射到隐含层(激活函数实现),再映射到输出层(默认采用线性传递函数),得到期望输出值。将期望输出值和实际测量值做比较,计算误差函数J,再将误差反向传播,通过梯度下降等算法来调节BP网络的权值和阈值。重复该过程,直到满足设定的目标误差或者最大迭代次数等终止准则,停止训练。

通过下面的例子来理解每一层的作用。

1)输入层:相当于人的五官,五官获取外部信息,对应神经网络模型input端口接收输入数据的过程。
2)隐含层:对应人的大脑,大脑对五官传递来的数据进行分析和思考,神经网络的隐含层hidden Layer对输入层传来的数据x进行映射,简单理解为一个公式hiddenLayer_output=F(w*x+b)。其中,w、b叫做权重、阈值参数,F()为映射规则,也叫激活函数,hiddenLayer_output是隐含层对于传来的数据映射的输出值。换句话说,隐含层对于输入的影响因素数据x进行了映射,产生了映射值。
3)输出层:可以对应为人的四肢,大脑对五官传来的信息经过思考(隐含层映射)之后,再控制四肢执行动作(向外部作出响应)。类似地,BP神经网络的输出层对hiddenLayer_output再次进行映射,outputLayer_output=w *hiddenLayer_output+b。其中,w、b为权重、阈值参数,outputLayer_output是神经网络输出层的输出值(也叫仿真值、预测值)(理解为,人脑对外的执行动作,比如婴儿拍打桌子)。
4)梯度下降算法:通过计算outputLayer_output和神经网络模型传入的y值之间的偏差,使用算法来相应调整权重和阈值等参数。这个过程,可以理解为婴儿拍打桌子,打偏了,根据偏离的距离远近,来调整身体使得再次挥动的胳膊不断靠近桌子,最终打中。

BP神经网络所实现的功能作用

“能尽数天星,便能尽知棋势”。围棋体现着大自然的道法,而在AlphaGo击败人类围棋冠军,则是使用算法来寻求围棋的道,实现人机对战。BP神经网络训练的结果:得到多维数据x与y之间存在的规律,即实现由x来映射逼近y。而BP训练出来得到的模型是否可靠,表现为对其他未经过训练的数据,输入到BP中,是否能输出较为准确的预测值。对此,在BP神经网络训练之后,还需要再给指标因素x1到训练好的bp network中,得到相应的BP输出值(预测值)predict1,通过作图等,计算Mse,Mape,R方等指标,来对比predict1和y1的接近程度,就可以知道模型是否预测准确。这是BP模型的测试过程,即预测过程。

小结 BP神经网络实现了:a). 根据训练集数据,训练得到一个模型,b). 对模型的可靠性与准确性进行测试集(不同于训练样本数据)预测,和实际值对比,检验预测的精度。c). 只给输入,得到预测值(可理解为测试集的数据丢了实测值,本质一样,给输入到BP中,得到输出)。由于该情况无输出,纯预测,无法检验精度是否合格,写论文时无太大意义而不必实现该情况的步骤。

2. 遗传算法GA优化BP神经网络原理

在BP神经网络训练的过程中,通过前向传播数据与误差反向传递,使用算法来更新权重阈值。一方面,在该过程中,第一次前向传播过程的权重和阈值该如何确定,即如何初始化权重和阈值。深度学习的方法是采用随机化方法得到初始的权值与阈值参数。另一方面,选定了初始参数后,梯度下降算法将初始参数值作为起点,进行参数优化与更新。

在优化算法的发展中,有两类:确定性算法与启发式算法。确定性算法指使用数学方法求最优问题,找到的结果与求导的初始点有关,一般为确定值。启发式算法则是灵感源于自然界生物进化的规律,主要思想为迭代逼近最优,优化的结果为满足工程精度要求的可变值(无限接近理论最优值)。

在上述过程中,作为一种确定性算法,梯度下降算法的收敛性是得到了证明的,但收敛值并非一定是全局最优,与初始的参数值(梯度下降算法的起点)有关。由于随机初始的参数未必是最优的起点(指既训练准确,又预测可靠),因此训练的模型可靠性和稳定性受到了初始随机参数的很大影响。作为启发式算法,遗传算法GA具体很好的全局搜索能力,引入GA用来解决此问题。

主要思想 将参数作为问题的决策变量,模型的精度作为问题的目标函数。遗传算法GA优化BP神经网络的算法流程图如下:
在这里插入图片描述

3. GA-BP模型建立

3.1 模型与数据介绍

下面以MATLAB官方提供的化学传感器的数据集为例,进行建模。

  1. 数据介绍:采集某个化学实验过程的数据,将8个传感器的采样数据作为输入(x),第9个传感器的采样数据作为输出(y)。
  2. 数据格式如下:
样本编号x1x2x3x8Target(即y)
1
2
n
  1. 读取数据:
%% 读取读取
data=xlsread('数据.xlsx','Sheet1','A1:I498'); %%使用xlsread函数读取EXCEL中对应范围的数据即可  

%输入输出数据
input=data(:,1:end-1);    %data的第一列-倒数第二列为特征指标
output=data(:,end);  %data的最后面一列为输出的指标值

N=length(output);   %全部样本数目
testNum=100;   %设定测试样本数目
trainNum=N-testNum;    %计算训练样本数目

3.2 GA与BP参数设置

1) BP参数设置

对权重和阈值有关的参数进行说明:
a). 输入层和输出层节点使用size函数直接获取。函数用法:[M,N]=size(A),M为A的行数,N为A的列数。size(A,2)得到的是第二个参数N,即列数。此数据中,输入8个维度指标,输出的为1个维度指标。即输入层节点为8,输出层节点为1。

inputnum=size(input,2);   %输入层神经元节点个数
outputnum=size(output,2);  %输出层神经元节点个数

b). 隐含层节点的确定过程,使用循环来遍历范围内的隐含层节点与训练误差情况。因为要找最小的误差,所以初始化训练误差时,将MSE设置较大的数字,用于在循环中确定最佳的隐含层节点。

%确定隐含层节点个数
%采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
MSE=1e+5; %初始化最小误差
for hiddennum=fix(sqrt(inputnum+outputnum))+1:fix(sqrt(inputnum+outputnum))+10
    

c). 其他BP参数,学习速率,训练次数,训练的目标误差等

% 网络参数
    net.trainParam.epochs=1000;         % 训练次数
    net.trainParam.lr=0.01;             % 学习速率
    net.trainParam.goal=0.000001;       % 训练目标最小误差

2)遗传算法GA参数设置

%初始化ga参数
PopulationSize_Data=30;   %初始种群规模
MaxGenerations_Data=50;   %最大进化代数
CrossoverFraction_Data=0.8;  %交叉概率
MigrationFraction_Data=0.2;   %变异概率

3.3 遗传算法优化BP的设计

1)优化变量的设计
使用遗传算法求解优化问题时,对于决策变量(优化变量)有三种编码方式:二进制编码,向量形式编码,矩阵形式编码。

由于权重和阈值分别以m×n维的矩阵,向量形式存在与BP神经网络结构(net)中。为方便对每个元素都进行优化,先将元素分别取出,然后按取的顺序放入到向量(染色体)中,完成编码。权重和阈值的经验范围为[-1,1],可适当将寻优的范围放宽,取[-3,3]。

优化变量(元素)个数的计算如下:

nvars=inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum;    %变量维度
lb=repmat(-3,nvars,1);    %自变量下限 %repmat得到一个nvars×1维的向量,每个元素的值都为-3,即优化变量下限
ub=repmat(3,nvars,1);   %自变量上限

2)适应度函数的设计
采用以下公式计算适应度值。

F = min ⁡ ( M S E Trainingset  ,  Testingset  ) F=\min \left(M S E_{\text {Trainingset }, \text { Testingset }}\right) F=min(MSETrainingset , Testingset )

式中,TraingingSet,TestingSet,分别为训练集和测试集的样本。因为预测精度越高,说明误差越低,所以公式设计为求解最小的均方误差。使用遗传算法后,适应度函数值越小,表明训练越准确,且兼顾模型的预测精度更好。
3)算法设计
将遗传算法视为一个“黑箱”优化器。在确定了优化的变量与目标适应度函数后,只需要经过该“黑箱”,即可输出最小的误差(精度最好值)和最优解变量,再把变量赋给BP神经网络的权值矩阵与阈值向量的相应位置,进行优化后的BP训练与测试即可。说明:在遗传算法的“黑箱”求解器中进行的算法操作为:选择、交叉与变异。

4. 测试结果

1 BP各层的神经元个数的确定过程
在这里插入图片描述

2 遗传算法GA进化曲线

在这里插入图片描述

3 遗传算法GA优化BP神经网络与BP的预测结果对比

在这里插入图片描述在这里插入图片描述

4 预测值和真实值的误差计算对比(MAE、MSE、RMSE、MAPE)

在这里插入图片描述

5. MATLAB代码

以下介绍了常用的BP神经网络预测和分类代码模型及编写相应的代码,相关模型原理见博客主页。

BP神经网络预测优化代码 (点击蓝色字体下载资源)
遗传算法优化BP神经网络回归预测MATLAB代码
粒子群算法PSO优化BP神经网络回归预测MATLAB代码
布谷鸟搜索算法CS优化BP神经网络回归预测MATLAB代码
海鸥优化算法SOA优化BP神经网络回归预测MATLAB代码
鲸鱼优化算法WOA优化BP神经网络回归预测MATLAB代码
麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
人工蜂群算法ABC优化BP神经网络回归预测MATLAB代码
蚁群算法ACO优化BP神经网络回归预测MATLAB代码
原子搜索算法ASO优化BP神经网络回归预测MATLAB代码
基于Logistic混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
基于Logistic混沌映射改进的原子搜索算法ASO优化BP神经网络回归预测MATLAB代码
基于Sine混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络回归预测MATLAB代码
基于Tent混沌映射改进的原子搜索算法ASO优化BP神经网络回归预测MATLAB代码
BP神经网络分类及优化算法模型
BP神经网络数据分类算法MATLAB代码
遗传算法GA优化BP分类算法MATLAB代码
粒子群算法PSO优化BP分类算法MATLAB代码
麻雀搜索算法SSA优化BP神经网络分类MATLAB代码
蝙蝠算法BA优化BP神经网络分类MATLAB代码
Elman神经网络数据分类算法MATLAB代码

代码点击上面的表格

评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CJ-leaf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值