遗传算法GA优化BP神经网络(GA-BP)回归预测-Matlab代码实现-附带使用教程及注意事项

一、BP神经网络

BP神经网络(Back Propagation Neural Network,BPNN)是一种按误差反向传播训练的多层前馈网络,基本思想是梯度下降法,利用梯度搜索技术,以使网络的实际输出值和期望输出值的误差均方差为最小。

BP神经网络包括信号正向传播和反向传播调整两个过程,即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。反向传播调整两是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),BP网络训练即告完成。此时经过训练完成的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

二、遗传算法

遗传算法(Genetic Algorithm,GA)是基于达尔文进化论中自然选择遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法模拟了生物群体的特征进化和自然选择过程中的基因选择、基因交叉和基因突变现象。遗传算法的中心思想是:种群中的每个个体是问题的一个解,称为“染色体”,利用适应度值测量染色体的好坏。遗传算法初始化时依据随机生成的准则,设置初始解并计算个体适应度值。按照所选择的适应度函数并通过遗传中的选择、交叉和变异对个体进行筛选,使适应度值好的个体被保留,适应度差的个体被淘汰,新的群体既继承了上一代的信息,又优于上一代,反复循环,直至满足条件。 遗传算法步骤如下:

  1. 编码。遗传算法不能直接处理问题空间的参数,必须通过编码将要求解的问题表示成遗传空间的染色体或者个体,因此遗传算法编码是将问题的解在编码过程中转换为相应的基因,称作问题的表述。
  2. 适应度函数。遗传算法的适应度函数也称评价函数,用于判断种群中的个体的优劣程度的指标,根据所求问题的来进行评估的。遗传算法中,个体染色体能否进入到新种群中的概率是由适应度决定。适应度函数将问题转化为个体的适应度值,作为所寻求优化值与目标值之间的桥梁,因此将网络模型的误差函数作为适应度值,将种群进化描述为误差减小过程。
  3. 选择算子。种群进行选择操作的目的为选择基因较优个体,繁衍下一代新个体,达到群体进化。具有良好适应度的个体属于优秀个体,最终被保留下来。本研究选择轮盘赌方法计算选择操作时个体被选中的概率。

交叉变异。交叉操作是采用两两配对的方式在特定条件下两个个体交换部分基后,获得两个新的个体。突变是指染色体上的基因变化而产生的新染色体。遗传算法运算时个体的选择概率通常受到个体适应度的限制,开始具有较高适应度的个体将在整体中处于主导地位,最初的最佳个体之间通过交叉和突变也产生了新个体。在遗传进化的后期阶段,种群中的个体都可能具有优异的适应度值,此时进化效率会降低。

 三、关键代码展示

net=newff(inputn,outputn,hiddennum_best,{'tansig','purelin'},'trainlm');% 建立模型

%网络参数配置
net.trainParam.epochs=1000;         % 训练次数
net.trainParam.lr=0.01;             % 学习速率
net.trainParam.goal=0.00001;        % 训练目标最小误差
net.trainParam.show=25;             % 显示频率
net.trainParam.mc=0.01;             % 动量因子
net.trainParam.min_grad=1e-6;       % 最小性能梯度
net.trainParam.max_fail=6;          % 最高失败次数

%初始化ga参数 
PopulationSize_Data=30;       %初始种群规模
MaxGenerations_Data=60;       %最大进化代数
CrossoverFraction_Data=0.8;   %交叉概率
MigrationFraction_Data=0.2;   %变异概率
nvars=inputnum*hiddennum_best+hiddennum_best+hiddennum_best*outputnum+outputnum; 
lb=repmat(-3,nvars,1);    %自变量下限
ub=repmat(3,nvars,1);     %自变量上限

%调用遗传算法函数
options = optimoptions('ga');
options = optimoptions(options,'PopulationSize', PopulationSize_Data);
options = optimoptions(options,'CrossoverFraction', CrossoverFraction_Data);
options = optimoptions(options,'MigrationFraction', MigrationFraction_Data);
options = optimoptions(options,'MaxGenerations', MaxGenerations_Data);
options = optimoptions(options,'SelectionFcn', @selectionroulette);   %轮盘赌选择
options = optimoptions(options,'CrossoverFcn', @crossovertwopoint);   %两点交叉
options = optimoptions(options,'MutationFcn', {  @mutationgaussian [] [] });   %高斯变异
options = optimoptions(options,'Display', 'iter');    %‘off’为不显示迭代过程,‘iter’为显示迭代过程
options = optimoptions(options,'PlotFcn', { @gaplotbestf });    %最佳适应度作图
%求解
[x,fval] = ga(@fitness,nvars,[],[],[],[],lb,ub,[],[],options);

四、运行结果展示

(1)根据隐含层节点计算公式,计算最佳隐含层节点数

(2) BP和GA-BP预测对比及误差

(3)计算各项误差指标

 

(4)遗传算法GA进化曲线-适应度

 (5)预测结果回归图

(6)误差直方图

遗传算法GA)是一种通过模拟生物进化中的选择、交叉和变异等过程来求解优化问题的算法。它可以应用于各种领域,包括优化BP神经网络分类模型。 GABP神经网络结合使用,可以提高分类模型的预测精度。下面是使用MATLAB实现GA优化BP神经网络分类模型的源代码示例: 1. 定义问题的适应度函数: ``` function fitness = fitnessFunction(x) % 将遗传算法的参数传递给BP神经网络模型 % 设置BP神经网络的参数 % 在训练集上训练BP神经网络模型 % 使用BP神经网络进行测试,并计算分类准确率 % 返回分类准确率作为适应度值 end ``` 2. 初始化种群: ``` populationSize = 50; % 种群大小 numberOfVariables = 10; % 变量个数(BP神经网络参数个数) population = zeros(populationSize ,numberOfVariables); for i = 1:populationSize % 随机生成初始种群 population(i,:) = rand(1, numberOfVariables); end ``` 3. 运行遗传算法优化BP神经网络模型: ``` options = gaoptimset('PopulationType', 'doubleVector', 'PopulationSize', populationSize, 'Generations', 50); [x, fval] = ga(@fitnessFunction, numberOfVariables, options); ``` 通过以上代码,我们可以完成GA-BP神经网络分类预测的优化过程。在适应度函数中,我们将GA的参数传递给BP神经网络模型,并计算分类准确率作为适应度值。然后,使用GA优化算法迭代地搜索最优解,即最优的BP神经网络参数的组合。最后,返回在测试集上的分类准确率,并将最优的BP神经网络模型用于分类预测。 总之,GA优化BP神经网络分类模型可以通过MATLAB实现,通过适应度函数将GA参数传递给BP神经网络,并使用遗传算法搜索最优的BP神经网络参数组合,以提高分类预测的准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab神经网络深度学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值