【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 代码下载

相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
98 55
|
13天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
88 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
12天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
94 30
|
19天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
7天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
10天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
16天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
2天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
35 17
|
13天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
14天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
38 10