【BP分类】基于鸟群算法优化BP神经网络实现数据分类附matlab代码

简介: 【BP分类】基于鸟群算法优化BP神经网络实现数据分类附matlab代码

1 简介

BSA 算法优化 BP 神经网络的基本思想是: 利 用 BSA 算法的全局搜索能力, 优化 BP 神经网络初始的权值和阈值, 也就是决策变量, 其中每一组决策变量均包含在鸟群个体所处的空间位置中. 然后, 通过适应度函数来衡量个体所处空间位置的优劣度, 并利用鸟群觅食过程中的觅食行为、警戒行为和飞行行为等策略不断更新个体空间位置, 直至获取最佳的个体空间位置, 即获得待优化问题的最佳决策变量

BSA-BP 算法预测 PMV 指标主要包括以下几个部分: 确定训练样本数据、设计 BP 神经网络结构、利用 BSA 算法优化 BP 神经网络初始的权值和阈值、训练优化后的网络. 具体实现步骤如下:

步骤 1. 确定训练样本数据. 确定所需输入变量的取值范围; 然后, 根据 PMV 指标的数学模型, 利用MATLAB 软件编辑 PMV 指标的计算程序, 获取相当数量的样本数据; 最后, 经过预处理, 作为 BP 神经网络的训练样本和测试样本数据.

步骤 2. 设计 BP 神经网络结构. 依据标准 BP 神经网络模型以及 PMV 指标的数学模型, 确定 BP 神经网络的层数、每层的神经元数, 以及其他参数.

步骤 3. 确定 BSA 算法中各参数. 包括初始化种群规模 N、搜索空间维数 D、最大迭代次数 T、飞行间隔 FQ、觅食概率 P、常量 C、S、a1、a2、FL 以及随机初始化鸟群个体空间位置 xti.

步骤 4. 计算 BSA 算法的适应度函数值, 将样本的均方误差作为适应度函数, 找到最小的适应度值, 并保留当前最好个体空间位置. 判断算法终止条件是否满足, 若满足则转至步骤 6, 否则执行步骤

5.步骤 5. BSA 算法优化 BP 神经网络初始的权值和阈值. 依据 BSA 算法的步骤, 不断迭代进行寻优, 直到迭代停止, 输出全局最优值, 也就是最优网络初始的权值和阈值, 并将其赋给 BP 神经网络.

步骤 6. 训练 BSA 算法优化后的 BP 神经网络. 网络经训练结束后, 将得到最佳的 PMV 指标预测模型.上面所述的实现步骤可见图 3

2 部分代码

% ------------------------------------------------------------------------% Bird Swarm Algorithm (BSA) (demo)% This is a simple demo version only implemented the basic idea of BSA for% solving the unconstrained problem, namely Sphere function.%% The details about BSA are illustratred in the following paper.% Xian-Bing Meng, et al (2015): A new bio-inspXred optimisation algorithm:% Bird Swarm Algorithm, Journal of Experimental & Theoretical% Artificial Intelligence, DOI: 10.1080/0952813X.2015.1042530%% The parameters in BSA are presented as follows.% FitFunc    % The objective function% M          % Maxmimal generations (iterations)% pop        % Population size% dim        % Dimension% FQ         % The frequency of birds' flight behaviours% c1         % Cognitive accelerated coefficient% c2         % Social accelerated coefficient% a1, a2     % Two paramters which are related to the indirect and direct%              effect on the birds' vigilance bahaviors.%% Using the default value, BSA can be executed using the following code.% [ bestX, fMin ] = BSA% ------------------------------------------------------------------------% Main programsfunction [ bestX, fMin ,yy] = BSA( FitFunc, M, pop, dim, FQ, c1, c2, a1, a2 )% Display helphelp BSA.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set the default parameters% set the parameterslb= -100*ones( 1,dim );   % Lower boundsub= 100*ones( 1,dim );    % Upper bounds%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Initializationfor i = 1 : pop    x( i, : ) = lb + (ub - lb) .* rand( 1, dim );    fit( i ) = FitFunc( x( i, : ) );endpFit = fit; % The individual's best fitness valuepX = x;     % The individual's best position corresponding to the pFit[ fMin, bestIndex ] = min( fit );  % fMin denotes the global optimum% bestX denotes the position corresponding to fMinbestX = x( bestIndex, : );%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start the iteration.for iteration = 1 : M        prob = rand( pop, 1 ) .* 0.2 + 0.8;%The probability of foraging for food        if( mod( iteration, FQ ) ~= 0 )        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        % Birds forage for food or keep vigilance        sumPfit = sum( pFit );        meanP = mean( pX );        for i = 1 : pop            if rand < prob(i)                x( i, : ) = x( i, : ) + c1 * rand.*(bestX - x( i, : ))+ ...                    c2 * rand.*( pX(i,:) - x( i, : ) );            else                person = randiTabu( 1, pop, i, 1 );                                x( i, : ) = x( i, : ) + rand.*(meanP - x( i, : )) * a1 * ...                    exp( -pFit(i)/( sumPfit + realmin) * pop ) + a2 * ...                    ( rand*2 - 1) .* ( pX(person,:) - x( i, : ) ) * exp( ...                    -(pFit(person) - pFit(i))/(abs( pFit(person)-pFit(i) )...                    + realmin) * pFit(person)/(sumPfit + realmin) * pop );            end                        x( i, : ) = Bounds( x( i, : ), lb, ub );            fit( i ) = FitFunc( x( i, : ) );        end        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%            else        FL = rand( pop, 1 ) .* 0.4 + 0.5;    %The followed coefficient                %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        % Divide the bird swarm into two parts: producers and scroungers.        [ans, minIndex ] = min( pFit );        [ans, maxIndex ] = max( pFit );        choose = 0;        if ( minIndex < 0.5*pop && maxIndex < 0.5*pop )            choose = 1;        end        if ( minIndex > 0.5*pop && maxIndex < 0.5*pop )            choose = 2;        end        if ( minIndex < 0.5*pop && maxIndex > 0.5*pop )            choose = 3;        end        if ( minIndex > 0.5*pop && maxIndex > 0.5*pop )            choose = 4;        end        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        if choose < 3            for i = (pop/2+1) : pop                x( i, : ) = x( i, : ) * ( 1 + randn );                x( i, : ) = Bounds( x( i, : ), lb, ub );                fit( i ) = FitFunc( x( i, : ) );            end            if choose == 1                x( minIndex,: ) = x( minIndex,: ) * ( 1 + randn );                x( minIndex, : ) = Bounds( x( minIndex, : ), lb, ub );                fit( minIndex ) = FitFunc( x( minIndex, : ) );            end            for i = 1 : 0.5*pop                if choose == 2 || minIndex ~= i                    person = randi( [(0.5*pop+1), pop ], 1 );                    x( i, : ) = x( i, : ) + (pX(person, :) - x( i, : )) * FL( i );                    x( i, : ) = Bounds( x( i, : ), lb, ub );    end% End of the main program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The following functions are associated with the main program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This function is the objective function

3 仿真结果

4 参考文献

[1]郭彤颖, 陈露. 基于鸟群算法优化BP神经网络的热舒适度预测[J]. 计算机系统应用, 2018, 27(4):5.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
4月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
446 0
|
4月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
330 2
|
3月前
|
机器学习/深度学习 数据采集 存储
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
概率神经网络的分类预测--基于PNN的变压器故障诊断(Matlab代码实现)
405 0
|
4月前
|
机器学习/深度学习 并行计算 算法
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
【CPOBP-NSWOA】基于豪冠猪优化BP神经网络模型的多目标鲸鱼寻优算法研究(Matlab代码实现)
119 8
|
3月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
401 0
|
3月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
179 0
|
3月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
151 0
|
3月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
150 0
|
3月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
212 8
|
3月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
227 8

热门文章

最新文章