首页 > 行业资讯 > 【BP分类】基于头脑风暴算法优化BP神经网络实现数据分类附matlab代码

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

时间:2022-06-05 来源: 浏览:

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

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #神经网络预测matlab源码 286个

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 range prob_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 values popu = rang_l + (rang_r - rang_l) * rand (n_p,n_d); % initialize the population of individuals popu_sorted = rang_l + (rang_r - rang_l) * rand (n_p,n_d); % initialize the population of individuals sorted according to clusters n_iteration = 0 ; % current iteration number % initialize cluster probability to be zeros prob = zeros(n_c, 1 ); best = zeros(n_c, 1 ); % index of best individual in each cluster centers = rang_l + (rang_r - rang_l) * rand (n_c,n_d); % initialize best individual in each cluster centers_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 best best_fitness = 1000000 *ones(max_iteration, 1 ); fitness_popu = 1000000 *ones(n_p, 1 ); % store fitness value for each individual fitness_popu_sorted = 1000000 *ones(n_p, 1 ); % store fitness value for each sorted individual indi_temp = zeros( 1 ,n_d); % store temperary individual % calculate fitness for each individual in the initialized population for idx = 1 :n_p fitness_popu(idx, 1 ) = fun(popu(idx,:)); end while 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 仿真结果

4 参考文献

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

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

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

5 代码下载

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐