用于预测,输入为3特征值,输出为1输出。内附数据集,拿来直接用,结构清晰,注释详细,全在一个程序里,方便对比。
本次用了BP、Elman神经网络和PSO-BP、PSO-Elman神经网络对比。
部分数据集:
部分代码:
clear;clc;close all;load data4.mat;[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);inputnum=3;hiddennum=5;outputnum=1;epoch_bp_elman=5000;dim=26;%=inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum;N=50;%种群数量epoch_pso=50;%粒子群算法迭代次数epoch_bp=5000;epoch_elman=5000;%BP、Elman神经网络迭代次数w=0.8;c1=1.5;c2=1.5;Xmax=20;Xmin=-20;%粒子群x上下限Vmax=10;Vmin=-10;%速度v上下限%初始化种群个体位置和速度x_bp=rand(N,dim)*(Xmax-Xmin)+Xmin;%初始BPv_bp=rand(N,dim)*(Xmax-Xmin)+Xmin;x_elman=rand(N,dim)*(Xmax-Xmin)+Xmin;%初始Elmanv_elman=rand(N,dim)*(Xmax-Xmin)+Xmin;%初始化个体、全局最优位置和最优值(速度)%PSOBPnet_bp=newff(train_x,train_y,hiddennum);%创建初始BP神经网络,给目标函数用p_bp_local=x_bp;%当前BP种群矩阵pbest_bp_local=ones(N,1);%当前BP种群适应度g_bp_quanju=ones(1,dim);%全局BP种群矩阵gbest_bp_quanju=1e5;%全局BP种群适应度初始设置为10W%粒子群算法迭代开始......figure(1);plot(1:size(yy_bp,2),yy_bp,'b-');title('PSO收敛曲线','fontsize',12);xlabel('迭代次数','fontsize',12);ylabel('适应度值','fontsize',12);%把粒子群算法迭代结果最优值赋给神经网络当做权重和偏置w1_bp=x_bp(1:inputnum*hiddennum);B1_bp=x_bp(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);w2_bp=x_bp(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);B2_bp=x_bp(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);w1_elman=x_elman(1:inputnum*hiddennum);B1_elman=x_elman(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum);w2_elman=x_elman(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum);B2_elman=x_elman(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum);figure(2);plot(1:size(error_psobp,2),error_psobp,'r',1:size(error_bp,2),error_bp,'m--',1:size(error_psoelman,2),error_psoelman,'g-',1:size(error_elman,2),error_elman,'c--');%title('预测误差','fontsize',12);xlabel('样本数量','fontsize',12);ylabel('误差值','fontsize',12);legend('PSO-BP误差','BP误差','PSO-Elman误差','Elman误差');figure(3);plot(1:size(test_x,2),result_bp,'m-',1:size(test_x,2),result_sim_bp,'r-',1:size(test_x,2),test_y,'b-',1:size(result_sim_elman,2),result_sim_elman,'g-',1:size(result_elman,2),result_elman,'c--')legend('BP预测值','PSO-BP预测值','真实值','PSO+Elman预测值','Elman预测值');
粒子群算法收敛曲线图:
预测结果:
源码下载地址:
/purchasing?link=PklaHRa
-------------------------------------------------------我的其他代码--------------------------------------------------------
粒子群算法优化BP神经网络-matlab源码
头脑风暴算法优化BP神经网络-matlab源码
层次聚类、k_means聚类-python源码
Adaboost-python手推源码不调用库-有手就会