头脑风暴算法BSO优化BP神经网络-matlab源码

原理:头脑风暴算法主要运用聚类和变异,他是通过模拟人们的解决问题的思想,办法而创立。

算法采用K-means聚类算法,将相似的个体聚成k类,并将人为设定的适应度函数值最优的个体作为聚类的中心。当然,为了避免陷入局部最优,将有概率随机产生一个新个体替换其中
一个聚类中心。

变异主要是:(1)在随机一个类中心,即该类最优个体上添加随机扰动产生新的个体;(2)在随机一个类中随机选择一个个体添加随机扰动产生新的个体;(3)随机融合两个类中心,并添加随机扰动产生新的个体;(4)随机融合两个类中随机的两个个体,并添加随机扰动产生新的个体。

用于预测,输入为3特征值,输出为1输出。内附数据集,拿来直接用,结构清晰,全中文详细注释,全在一个程序里,方便对比。

部分数据集:

部分代码:

clc;close all;clear;
load data;
inputnum=3;hiddennum=5;outputnum=1;epoch_bp_elman=5000;
[train_x,inputps]=mapminmax(train_x);
test_x=mapminmax('apply',test_x,inputps);
[train_y,outputps]=mapminmax(train_y);
test_y=mapminmax('apply',test_y,outputps);
N=50;epoch_bso=10;
class_num=5;%分类数
dim=26;%问题维度
ub=-5.12;lb=5.12;%上下界
P4=0.5;P2 =0.8; %选择一个簇形成新个体的概率
s=ones(1,dim); %通过添加随机值影响生成新个体的步长
x_bp=ub + (lb - ub) * rand(N,dim); %初始化个体的总体
x_sorted=ub + (lb - ub) * rand(N,dim); %初始化根据聚类排序的个体的总体
class_xuhao_centers = zeros(class_num,1); %每组最佳个体指数
x_bp_centers = ub + (lb - ub) * rand(class_num,dim); %初始化每个集群中的最佳个体
x_bp_centers_copy = ub + (lb - ub) * rand(class_num,dim); %初始化每个集群中的最佳单个COPY,以引入随机最佳
%计算初始化群体中每个个体的适应度
net_bp=newff(train_x,train_y,hiddennum);
for i=1:N
    fit(i,1) = fun_BP(x_bp(i,:),inputnum,hiddennum,outputnum,net_bp,train_x,train_y,test_x,test_y,outputps,i);
end
tssc_bsobp_fitness=min(fit);
......
net_bp.trainParam.epochs=epoch_bp_elman;
net_bp.trainParam.lr=0.05;
net_bp.trainParam.goal=0.000001;
net_bp.trainParam.showWindow=0;
[net_bp,tr]=train(net_bp,train_x,train_y);
result_sim_bsobp=sim(net_bp,test_x);
[error_bsobp,error_bsobp_MAE,error_bsobp_RMSE,error_bsobp_MAPE,error_bsobp_max,error_bsobp_max_seat]=fun_error_MAE_RMSE_MAPE_max(result_sim_bsobp,test_y);%BSOBP
[error_all,error_level]=fun_error_level(error_bsobp_MAE,error_bsobp_RMSE,error_bsobp_MAPE,error_bp_MAE,error_bp_RMSE,error_bp_MAPE);%BSOBP1,BP2
[accuracy_bsobp_MAE,accuracy_bsobp_RMSE,accuracy_bsobp_MAPE,errorlow_bsobp_MAE,errorlow_bsobp_RMSE,errorlow_bsobp_MAPE]=fun_accuracy_error(error_bsobp_MAE,error_bsobp_RMSE,error_bsobp_MAPE,error_bp_MAE,error_bp_RMSE,error_bp_MAPE);%BSOBP-BP
fprintf("BSOBP初始/结果最优适应度为:%f/%f\n",tssc_bsobp_fitness,yy_bsobp(end,1));
fprintf("          MAE             RMSE            MAPE            error_max(x)\nBSOBP     %f[%d]     %f[%d]     %f[%d]     %f(%d)\nBP        %f[%d]     %f[%d]     %f[%d]     %f(%d)\n",error_bsobp_MAE,error_level(1,1),error_bsobp_RMSE,error_level(1,2),error_bsobp_MAPE,error_level(1,3),error_bsobp_max,error_bsobp_max_seat,error_bp_MAE,error_level(2,1),error_bp_RMSE,error_level(2,2),error_bp_MAPE,error_level(2,3),error_bp_max,error_bp_max_seat);
fprintf("acc↑(BSOBP/BP)  %f       %f       %f\nerr↓(BSOBP/BP)  %f       %f       %f\n",accuracy_bsobp_MAE,accuracy_bsobp_RMSE,accuracy_bsobp_MAPE,errorlow_bsobp_MAE,errorlow_bsobp_RMSE,errorlow_bsobp_MAPE);
%结果分析
figure(1);
plot(1:size(yy_bsobp,1),yy_bsobp,'b');
title(['适应度曲线  ' '终止代数=' num2str(epoch_bso)]);
xlabel('迭代次数');ylabel('适应度');
legend('BSO-BP');
figure(2);
plot(1:size(error_bsobp,2),error_bsobp,'r-',1:size(error_bp,2),error_bp,'m--');
xlabel('样本数量','fontsize',12);ylabel('相对误差','fontsize',12);
legend('PSO-BP误差','BP误差');
figure(3);
plot(1:size(test_x,2),result_sim_bsobp,'r-',1:size(test_x,2),result_bp,'m-',1:size(test_x,2),test_y,'b-')
xlabel('样本数量','fontsize',12);ylabel('流量','fontsize',12);
legend('BSO-BP预测值','BP预测值','真实值');

头脑风暴算法收敛曲线图:

预测结果:

可能不怎么看的明显

 

 源码下载地址: 

链接:https://pan.baidu.com/s/1Hzk0trmkdHr0GfmBjk2KGA 
提取码:6666

-------------------------------------------------------我的其他代码--------------------------------------------------------

粒子群算法优化BP神经网络-matlab源码

粒子群算法优化BP和Elman神经网络-matlab源码

层次聚类、k_means聚类-python源码

Adaboost-python手推源码不调用库-有手就会

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我也想搞机器学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值