【BP分类】基于头脑风暴算法优化BP神经网络实现数据分类附matlab代码

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

 1 简介

为了提高分类的准确性,该模型引入具有全局寻优特点的头脑风暴优化算法,用于模拟人类提出创造性思维解决问题的过程,具有强大的全局搜索和局部搜索的能力,同时利用BP神经网络所具有良好的非线性映射能力,学习适应能力和容错性,最大程度上考虑到海洋水质评价因素的非线性和非平稳的关系,得到BP神经网络的各层权值,阈值的最优解,实验结果表明该评价模型能够克服局部极小问题,分类结果准确性较高,并具有一定的实用性.

2 部分代码

function best_fitness = bso2(fun,n_p,n_d,n_c,rang_l,rang_r,max_iteration)% fun = fitness_function% n_p; population size% n_d; number of dimension% n_c: number of clusters% rang_l; left boundary of the dynamic range% rang_r; right boundary of the dynamic rangeprob_one_cluster = 0.8;                                    % probability for select one cluster to form new individual; stepSize = ones(1,n_d);                                    % effecting the step size of generating new individuals by adding random valuespopu = rang_l + (rang_r - rang_l) * rand(n_p,n_d);         % initialize the population of individualspopu_sorted  = rang_l + (rang_r - rang_l) * rand(n_p,n_d); % initialize the  population of individuals sorted according to clustersn_iteration = 0;                                           % current iteration number% initialize cluster probability to be zerosprob = zeros(n_c,1);best = zeros(n_c,1);                                       % index of best individual in each clustercenters = rang_l + (rang_r - rang_l) * rand(n_c,n_d);      % initialize best individual in each clustercenters_copy = rang_l + (rang_r - rang_l) * rand(n_c,n_d); % initialize best individual-COPY in each cluster FOR the purpose of introduce random bestbest_fitness = 1000000*ones(max_iteration,1);fitness_popu = 1000000*ones(n_p,1);                        % store fitness value for each individualfitness_popu_sorted = 1000000*ones(n_p,1);                 % store  fitness value for each sorted individualindi_temp = zeros(1,n_d);                                  % store temperary individual% calculate fitness for each individual in the initialized populationfor idx = 1:n_p    fitness_popu(idx,1) = fun(popu(idx,:));endwhile n_iteration < max_iteration         cluster = kmeans(popu, n_c,'Distance','cityblock','Start',centers,'EmptyAction','singleton'); % k-mean cluster      % clustering          fit_values = 100000000000000000000000000.0*ones(n_c,1);  % assign a initial big fitness value  as best fitness for each cluster in minimization problems      number_in_cluster = zeros(n_c,1);                        % initialize 0 individual in each cluster      for idx = 1:n_p          number_in_cluster(cluster(idx,1),1)= number_in_cluster(cluster(idx,1),1) + 1;                % find the best individual in each cluster          if fit_values(cluster(idx,1),1) > fitness_popu(idx,1)  % minimization             fit_values(cluster(idx,1),1) = fitness_popu(idx,1);             best(cluster(idx,1),1) = idx;          end      end        % form population sorted according to clusters      counter_cluster = zeros(n_c,1);  % initialize cluster counter to be 0       acculate_num_cluster = zeros(n_c,1);  % initialize accumulated number of individuals in previous clusters      for idx =2:n_c          acculate_num_cluster(idx,1) = acculate_num_cluster((idx-1),1) + number_in_cluster((idx-1),1);      end      %start form sorted population      for idx = 1:n_p          counter_cluster(cluster(idx,1),1) = counter_cluster(cluster(idx,1),1) + 1 ;          temIdx = acculate_num_cluster(cluster(idx,1),1) +  counter_cluster(cluster(idx,1),1);          popu_sorted(temIdx,:) = popu(idx,:);          fitness_popu_sorted(temIdx,1) = fitness_popu(idx,1);      end        % record the best individual in each cluster      for idx = 1:n_c          centers(idx,:) = popu(best(idx,1),:);              end        if (rand() < 0.2) %  select one cluster center to be replaced by a randomly generated center         cenIdx = ceil(rand()*n_c);         centers(cenIdx,:) = rang_l + (rang_r - rang_l) * rand(1,n_d);      end               % calculate cluster probabilities based on number of individuals in each cluster      for idx = 1:n_c          prob(idx,1) = number_in_cluster(idx,1)/n_p;          if idx > 1             prob(idx,1) = prob(idx,1) + prob(idx-1,1);          end      end      % generate n_p new individuals by adding Gaussian random values                 for idx = 1:n_p          r_1 = rand();             % probability for select one cluster to form new individual          if r_1 < prob_one_cluster  % select one cluster             r = rand();             for idj = 1:n_c                 if r < prob(idj,1)                                          if rand() < 0.4  % use the center                       indi_temp(1,:) = centers(idj,:);                     else             % use one randomly selected  cluster                        indi_1 = acculate_num_cluster(idj,1) + ceil(rand() * number_in_cluster(idj,1));                        indi_temp(1,:) = popu_sorted(indi_1,:);                      end                    break                end             end          else % select two clusters               % pick two clusters                cluster_1 = ceil(rand() * n_c);               indi_1 = acculate_num_cluster(cluster_1,1) + ceil(rand() * number_in_cluster(cluster_1,1));               cluster_2 = ceil(rand() * n_c);               indi_2 = acculate_num_cluster(cluster_2,1) + ceil(rand() * number_in_cluster(cluster_2,1));                tem = rand();               if rand() < 0.5 %use center                  indi_temp(1,:) = tem * centers(cluster_1,:) + (1-tem) * centers(cluster_2,:);                else            % use randomly selected individuals from each cluster                              indi_temp(1,:) = tem * popu_sorted(indi_1,:) + (1-tem) * popu_sorted(indi_2,:);                end          end                    stepSize = logsig(((0.5*max_iteration - n_iteration)/20)) * rand(1,n_d);          indi_temp(1,:) = indi_temp(1,:) + stepSize .* normrnd(0,1,1,n_d);          % if better than the previous one, replace it          fv = fun(indi_temp);          if fv < fitness_popu(idx,1)  % better than the previous one, replace             fitness_popu(idx,1) = fv;             popu(idx,:) = indi_temp(1,:);          end      end      % keep the best for each cluster      for idx = 1:n_c          popu(best(idx,1),:) = centers_copy(idx,:);            fitness_popu(best(idx,1),1) = fit_values(idx,1);      end      n_iteration = n_iteration +1;      % record the best fitness in each iteration      best_fitness(n_iteration, 1) = min(fit_values);end

3 仿真结果

image.gif编辑

4 参考文献

[1]李海涛, 邵泽东. 基于头脑风暴优化算法与BP神经网络的海水水质评价模型研究[J]. 应用海洋学学报, 2020, 39(1):6.

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

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

5 代码下载

相关文章
|
2天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
4天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
15 3
|
13天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
15 3
|
12天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
16天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
57 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-LSTM网络的数据分类识别算法matlab仿真
本项目展示了基于贝叶斯优化(BO)的CNN-LSTM网络在数据分类中的应用。通过MATLAB 2022a实现,优化前后效果对比明显。核心代码附带中文注释和操作视频,涵盖BO、CNN、LSTM理论,特别是BO优化CNN-LSTM网络的batchsize和学习率,显著提升模型性能。
|
18天前
|
缓存 分布式计算 监控
优化算法和代码需要注意什么
【10月更文挑战第20天】优化算法和代码需要注意什么
15 0
|
2天前
|
SQL 安全 物联网
网络安全与信息安全:深入探讨网络漏洞、加密技术及安全意识###
网络安全与信息安全是当今数字化时代的重要议题。本文将详细探讨网络安全和信息安全的差异,重点介绍常见的网络漏洞、加密技术以及如何提升用户和组织的安全意识。通过具体案例和技术分析,帮助读者理解这些关键概念,并提供实用的建议以应对潜在的网络威胁。 ###
|
2天前
|
安全 网络安全 API
揭秘网络世界的守护神:网络安全与信息安全的深度剖析
【10月更文挑战第36天】在数字时代的洪流中,网络安全和信息安全如同守护神一般,保护着我们的数据不受侵犯。本文将深入探讨网络安全漏洞的成因、加密技术的奥秘以及提升个人安全意识的重要性。通过分析最新的攻击手段、介绍先进的防御策略,并分享实用的安全实践,旨在为读者呈现一个全方位的网络安全与信息安全知识图谱。让我们一同揭开网络世界的神秘面纱,探索那些不为人知的安全秘籍。
14 6
|
1天前
|
SQL 安全 算法
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第37天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,提高自己的网络安全防护能力。
6 4