位置: IT常识 - 正文

备战数学建模45-粒子群算法优化BP神经网络(攻坚站10)(数学建模心态崩了)

编辑:rootadmin
备战数学建模45-粒子群算法优化BP神经网络(攻坚站10)

推荐整理分享备战数学建模45-粒子群算法优化BP神经网络(攻坚站10)(数学建模心态崩了),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:数学建模的含金量有多大,数学建模数学,数学建模干货,数学建模心态崩了,数学建模0349,数学建模心态崩了,数学建模实战,备战数学建模竞赛新闻稿,内容如对您有帮助,希望把文章链接给更多的朋友!

BP神经网络主要用于预测和分类,对于大样本的数据,BP神经网络的预测效果较佳,BP神经网络包括输入层、输出层和隐含层三层,通过划分训练集和测试集可以完成模型的训练和预测,由于其简单的结构,可调整的参数多,训练算法也多,而且可操作性好,BP神经网络获得了非常广泛的应用,但是也存在着一些缺陷,例如学习收敛速度太慢、不能保证收敛到全局最小点、网络结构不易确定。另外,网络结构、初始连接权值和阈值的选择对网络训练的影响很大,但是又无法准确获得,针对这些特点可以采用遗传算法或粒子群算法等对神经网络进行优化。  

目录

一、pso+bp预测2022年勇士和凯尔特人夺冠情况

1.1、数据准备

1.2、粒子群优化BP神经网络流程图

1.3、BP神经网络和粒子群参数设置

1.4、pso+bp的完整MATLAB代码

1.5、预测结果

1.6、小结


一、pso+bp预测2022年勇士和凯尔特人夺冠情况1.1、数据准备

训练集的输入数据和输出数据,如下一共36*14的数据,前面18行是勇士队的训练数据,其中前13列是输入,最后一列是输出。后面的18行是凯尔特人的训练数据,其中前13列是输入,最后一列是输出.

14列数据,一共13个输入指标和1个输出指标。

输入指标:

1.季后赛球队场均投篮命中率  2.季后赛球队场均3分命中率 3.季后赛球队场均罚篮命中率  4.季后赛球队场均得分 5.季后赛球队场均篮板    6.季后赛球队场均助攻 7.季后赛球队场均抢断    8.季后赛球队场均盖帽 9.季后赛球队场均进攻篮板率   10.季后赛球队场均防守篮板率 11.季后赛球队场均失误率    12.球星数量 13.去年是否进入总决赛

输出指标:是否夺冠

下面8*14的数据分别是勇士和凯尔特人的测试数据,前4行勇士,后四行凯尔特人。

下面2*13的数据是今年勇士和凯尔特人的季后赛数据,用于预测今年的夺冠情况。

备战数学建模45-粒子群算法优化BP神经网络(攻坚站10)(数学建模心态崩了)

1.2、粒子群优化BP神经网络流程图

我们看一下粒子群优化BP神经网路的流程图,本质上就是用粒子群算法确定BP神经网络初始的权值和阈值,适应度函数(目标函数)是BP神经网络的预测的误差,根据适应度函数,粒子群算法寻找最优的位置,进而去初始化最优的BP权值和阈值。

1.3、BP神经网络和粒子群参数设置

假设我们构建的Bp神经网络为3层网络,则Bp神经网络中需要优化的参数实际上包含4部分:输入层到隐含层的权值、隐层神经元阈值、隐含层到输出层的权值、输出层阈值。

对于粒子群的目标函数的选取,即适应度函数,我们使用BP神经网络的误差范数来衡量,在当前权值和阈值下,Bp神经网络的预测性能怎么样,这里我们使用误差范数n o r m ( T s i m − T t e s t ) 来表示,范数越小说明预测得越准确,如果范数为0,说明预测得完全准确。

对于粒子群算法,我们需要不停地更新粒子的速度和位置,选取代入适应度函数内最合适的权值和阈值,具体的速度和位置更新公式如下:

1.4、pso+bp的完整MATLAB代码

PSO+bp的代码如下:

%% 基于PSO的Bp神经网络预测2022赛季NBA总冠军clc;clear;ticclose all;%% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出Tload('basket.mat')%加载数据P = trains(:,1:end-1) ;%训练集输入T = trains(:,end) ;%训练集输出P_test = tests(:,1:end-1) ;%测试集输入T_test = tests(:,end) ;%测试集输出cur_season = pred ;%待预测的数据,今年NBA季后赛数据,第1行为勇士队数据,第2行为凯尔特人队数据inputnum=size(P,2); %输入层神经元个数hiddennum=2*inputnum+1; %初始隐层神经元个数outputnum=size(T,2); %输出层神经元个数w1num=inputnum*hiddennum; %输入层到隐层的权值个数w2num=outputnum*hiddennum; %隐层到输出层的权值个数N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数%% 定义粒子群优化算法参数nVar=N; %变量数目VarSize=[1,nVar]; %变量矩阵大小VarMin=-0.5; %变量取值下限VarMax=0.5; %变量取值上限MaxIt=200; %最大迭代次数nPop=40; %种群数目w=1; %惯性权重wdamp=0.99; %惯性重量降低系数c1=1.5; %个体学习系数c2=2.0; %群体学习系数VelMax=0.1*(VarMax-VarMin); %速度上限VelMin=-VelMax; %速度下限%% 初始化empty_particle.Position=[];empty_particle.Cost=[];empty_particle.Velocity=[];empty_particle.Best.Position=[];empty_particle.Best.Cost=[];particle=repmat(empty_particle,nPop,1);GlobalBest.Cost=inf;for i=1:nPop %初始化位置 particle(i).Position=unifrnd(VarMin,VarMax,VarSize); %初始化速度 particle(i).Velocity=zeros(VarSize); %个体评价 particle(i).Cost=BpFunction(particle(i).Position,P,T,hiddennum,P_test,T_test); %更新个体最优 particle(i).Best.Position=particle(i).Position; particle(i).Best.Cost=particle(i).Cost; %更新群体最优 if particle(i).Best.Cost<GlobalBest.Cost GlobalBest=particle(i).Best; endendBestCost=zeros(MaxIt,1);%% 主循环for it=1:MaxIt for i=1:nPop %更新速度 particle(i).Velocity = w*particle(i).Velocity ... +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ... +c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position); %对超出范围的速度进行调整 particle(i).Velocity = max(particle(i).Velocity,VelMin); particle(i).Velocity = min(particle(i).Velocity,VelMax); %更新位置 particle(i).Position = particle(i).Position + particle(i).Velocity; %对超出位置范围的速度进行调整 IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax); particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside); %对超出范围的位置进行调整 particle(i).Position = max(particle(i).Position,VarMin); particle(i).Position = min(particle(i).Position,VarMax); %种群评估 particle(i).Cost=BpFunction(particle(i).Position,P,T,hiddennum,P_test,T_test); %更新个体最优 if particle(i).Cost<particle(i).Best.Cost particle(i).Best.Position=particle(i).Position; particle(i).Best.Cost=particle(i).Cost; %更新群体最优 if particle(i).Best.Cost<GlobalBest.Cost GlobalBest=particle(i).Best; end end end BestCost(it)=GlobalBest.Cost; disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]); w=w*wdamp;endBestSol=GlobalBest;%% Resultsfigure;%plot(BestCost,'LineWidth',2);semilogy(BestCost,'LineWidth',2);xlabel('迭代次数')ylabel('误差的变化')title('进化过程')grid on;fprintf(['最优初始权值和阈值:\n=',num2str(BestSol.Position),'\n最小误差=',num2str(BestSol.Cost),'\n'])%% 预测今年总冠军概率cur_test=zeros(size(cur_season,1),1);[~,bestCur_sim]=BpFunction(BestSol.Position,P,T,hiddennum,cur_season,cur_test);prob=softmax(bestCur_sim); disp(['勇士队获得2022年NBA总冠军概率为',num2str(prob(1))]);disp(['凯尔特人队获得2022年NBA总冠军概率为',num2str(prob(2))]);toc

BP的函数如下,用于计算误差范数,更新权值和阈值:

%% 输入% x:一个个体的初始权值和阈值% P:训练样本输入% T:训练样本输出% hiddennum:隐含层神经元数% P_test:测试样本输入% T_test:测试样本期望输出%% 输出% err:预测样本的预测误差的范数function [err,T_sim]=BpFunction(x,P,T,hiddennum,P_test,T_test)inputnum=size(P,2); %输入层神经元个数outputnum=size(T,2); %输出层神经元个数%% 数据归一化[p_train,ps_train]=mapminmax(P',0,1);p_test=mapminmax('apply',P_test',ps_train);[t_train,ps_output]=mapminmax(T',0,1);%% 开始构建BP网络net=newff(p_train,t_train,hiddennum); %隐含层为hiddennum个神经元%设定参数网络参数net.trainParam.epochs=1000;net.trainParam.goal=1e-3;net.trainParam.lr=0.01;net.trainParam.showwindow=false; %高版MATLAB使用 不显示图形框%% BP神经网络初始权值和阈值w1num=inputnum*hiddennum; %输入层到隐层的权值个数w2num=outputnum*hiddennum; %隐含层到输出层的权值个数W1=x(1:w1num); %初始输入层到隐含层的权值B1=x(w1num+1:w1num+hiddennum); %隐层神经元阈值W2=x(w1num+hiddennum+1:w1num+hiddennum+w2num); %隐含层到输出层的权值B2=x(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum); %输出层阈值net.iw{1,1}=reshape(W1,hiddennum,inputnum); %为神经网络的输入层到隐含层权值赋值net.lw{2,1}=reshape(W2,outputnum,hiddennum); %为神经网络的隐含层到输出层权值赋值net.b{1}=reshape(B1,hiddennum,1); %为神经网络的隐层神经元阈值赋值net.b{2}=reshape(B2,outputnum,1); %为神经网络的输出层阈值赋值%% 开始训练net = train(net,p_train,t_train);%% 测试网络t_sim = sim(net,p_test);T_sim1 = mapminmax('reverse',t_sim,ps_output); %反归一化T_sim=T_sim1';err=norm(T_sim-T_test); %预测结果与测试结果差的范数,范数越小说明预测得越准确,如果范数为0,说明预测得完全准确index0= T_sim<0; %找到预测值小于0的索引index1= T_sim>1; %找到预测值小于1的索引penalty=1000*abs(sum(T_sim(index0)))+1000*sum(T_sim(index1)-1); %预测值小于0或大于1会有惩罚err=err+penalty; %总误差end1.5、预测结果

通过预测结果可以发现整体来说随着迭代次数的增加,误差不断减少,最终预测出的结果是5-5开,不过勇气夺冠的概率稍微大于凯尔特人。

另外可以对上述代码进行优化,准确的说是对粒子群进行优化,使其在迭代次数内找到相对最好的值,上述用到是线性递减,我们这里用了自适应递减权重+收缩因子法,代码如下,其实优化的效果不明显。

%% 基于PSO的Bp神经网络预测2022赛季NBA总冠军clc;clear;ticclose all;%% 加载神经网络的训练样本 测试样本每列一个样本 输入P 输出Tload('basket.mat')%加载数据P = trains(:,1:end-1) ;%训练集输入T = trains(:,end) ;%训练集输出P_test = tests(:,1:end-1) ;%测试集输入T_test = tests(:,end) ;%测试集输出cur_season = pred ;%待预测的数据,今年NBA季后赛数据,第1行为勇士队数据,第2行为凯尔特人队数据inputnum=size(P,2); %输入层神经元个数hiddennum=2*inputnum+1; %初始隐层神经元个数outputnum=size(T,2); %输出层神经元个数w1num=inputnum*hiddennum; %输入层到隐层的权值个数w2num=outputnum*hiddennum; %隐层到输出层的权值个数N=w1num+hiddennum+w2num+outputnum; %待优化的变量的个数%% 定义粒子群优化算法参数nVar=N; %变量数目VarSize=[1,nVar]; %变量矩阵大小VarMin=-0.5; %变量取值下限VarMax=0.5; %变量取值上限MaxIt=200; %最大迭代次数nPop=40; %种群数目w=0.9; %惯性权重%wdamp=0.99; %惯性重量降低系数c1=2.05; %个体学习系数c2=2.05; %群体学习系数VelMax=0.1*(VarMax-VarMin); %速度上限VelMin=-VelMax; %速度下限w_max = 0.9 ;w_min = 0.4 ;C = c1+c2;fai = 2/abs((2-C-sqrt(C^2-4*C))); % 收缩因子%% 初始化empty_particle.Position=[];empty_particle.Cost=[];empty_particle.Velocity=[];empty_particle.Best.Position=[];empty_particle.Best.Cost=[];particle=repmat(empty_particle,nPop,1);GlobalBest.Cost=inf;for i=1:nPop %初始化位置 particle(i).Position=unifrnd(VarMin,VarMax,VarSize); %初始化速度 particle(i).Velocity=zeros(VarSize); %个体评价 particle(i).Cost=BpFunction(particle(i).Position,P,T,hiddennum,P_test,T_test); %更新个体最优 particle(i).Best.Position=particle(i).Position; particle(i).Best.Cost=particle(i).Cost; %更新群体最优 if particle(i).Best.Cost<GlobalBest.Cost GlobalBest=particle(i).Best; endendBestCost=zeros(MaxIt,1);%% 主循环for it=1:MaxIt for i=1:nPop %更新速度 particle(i).Velocity = fai * (w*particle(i).Velocity ... +c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ... +c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position)); %对超出范围的速度进行调整 particle(i).Velocity = max(particle(i).Velocity,VelMin); particle(i).Velocity = min(particle(i).Velocity,VelMax); %更新位置 particle(i).Position = particle(i).Position + particle(i).Velocity; %对超出位置范围的速度进行调整 IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax); particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside); %对超出范围的位置进行调整 particle(i).Position = max(particle(i).Position,VarMin); particle(i).Position = min(particle(i).Position,VarMax); %种群评估 particle(i).Cost=BpFunction(particle(i).Position,P,T,hiddennum,P_test,T_test); %更新个体最优 if particle(i).Cost<particle(i).Best.Cost particle(i).Best.Position=particle(i).Position; particle(i).Best.Cost=particle(i).Cost; %更新群体最优 if particle(i).Best.Cost<GlobalBest.Cost GlobalBest=particle(i).Best; end end end BestCost(it)=GlobalBest.Cost; disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]); %自适应权重 f_i=particle(i).Cost; % 取出第i个粒子的适应度 s = 0 ; f_min = particle(1).Best.Cost ; for k = 1 : nPop if f_min > particle(i).Best.Cost fmin = particle(i).Best.Cost ; s = s + particle(i).Best.Cost ; end end f_avg = s/nPop; % 计算此时适应度的平均值 if f_i <= f_avg if f_avg ~= f_min % 如果分母为0,我们就干脆令w=w_min w = w_min + (w_max - w_min)*(f_i - f_min)/(f_avg - f_min); else w = w_min; end else w = w_max; end %w=w*wdamp;endBestSol=GlobalBest;%% Resultsfigure;%plot(BestCost,'LineWidth',2);semilogy(BestCost,'LineWidth',2);xlabel('迭代次数')ylabel('误差的变化')title('进化过程')grid on;fprintf(['最优初始权值和阈值:\n=',num2str(BestSol.Position),'\n最小误差=',num2str(BestSol.Cost),'\n'])%% 预测今年总冠军概率cur_test=zeros(size(cur_season,1),1);[~,bestCur_sim]=BpFunction(BestSol.Position,P,T,hiddennum,cur_season,cur_test);prob=softmax(bestCur_sim); disp(['勇士队获得2022年NBA总冠军概率为',num2str(prob(1))]);disp(['凯尔特人队获得2022年NBA总冠军概率为',num2str(prob(2))]);toc1.6、小结

对于粒子群+bp的算法还有很多需要优化的,特别是对于粒子群的优化方法有很多,比如对权重系数w和学习因子c的优化等,这次主要是讲了一个思想,就是粒子群全局寻优去初始化bp神经网络的初始权值阈值,提高预测准确率。

本文链接地址:https://www.jiuchutong.com/zhishi/300312.html 转载请保留说明!

上一篇:【TypeScript】TS类型守卫(六)(typescript .d.ts)

下一篇:猿创征文|深度学习基于ResNet18网络完成图像分类(猿创部落是干什么的)

  • 最实用的网络推广四种方法(常用的网络推广平台有哪些呢)

    最实用的网络推广四种方法(常用的网络推广平台有哪些呢)

  • 苹果8p怎么装两张卡(苹果8p怎么装两个手机卡)

    苹果8p怎么装两张卡(苹果8p怎么装两个手机卡)

  • win10右下角的图标怎么全部都显示出来(win10右下角的图标怎么折叠)

    win10右下角的图标怎么全部都显示出来(win10右下角的图标怎么折叠)

  • vivo x27如何截屏(vivox27截屏快捷键)

    vivo x27如何截屏(vivox27截屏快捷键)

  • win10自带的视频编辑软件(win10自带的视频录制)

    win10自带的视频编辑软件(win10自带的视频录制)

  • 怎样解决空调上热下冷(怎样解决空调上的h1)

    怎样解决空调上热下冷(怎样解决空调上的h1)

  • 抖音怎么发1分钟以上的作品(抖音怎么发1分钟以上长视频)

    抖音怎么发1分钟以上的作品(抖音怎么发1分钟以上长视频)

  • 快手看不了图片怎么办(快手看不了图片怎么回事)

    快手看不了图片怎么办(快手看不了图片怎么回事)

  • 华为程序锁怎么设置(华为 程序锁)

    华为程序锁怎么设置(华为 程序锁)

  • 音轨窗口中R键的功能是什么(音轨窗口中r键是什么)

    音轨窗口中R键的功能是什么(音轨窗口中r键是什么)

  • 微信红包是不是点开就收了(微信红包是不是最多200)

    微信红包是不是点开就收了(微信红包是不是最多200)

  • 浏览别人的微信朋友圈会有记录吗(浏览别人的微信视频号别人知道吗)

    浏览别人的微信朋友圈会有记录吗(浏览别人的微信视频号别人知道吗)

  • x30屏幕尺寸(荣耀x30屏幕尺寸)

    x30屏幕尺寸(荣耀x30屏幕尺寸)

  • 蓝牙耳机提示音翻译(蓝牙耳机提示音可以改吗)

    蓝牙耳机提示音翻译(蓝牙耳机提示音可以改吗)

  • 小米永恒模式是啥(小米永恒模式是真的吗)

    小米永恒模式是啥(小米永恒模式是真的吗)

  • 手机如何设置紧急联系人(手机如何设置紧急报警电话)

    手机如何设置紧急联系人(手机如何设置紧急报警电话)

  • 手机服务密码几位数(手机服务密码一般是什么数字)

    手机服务密码几位数(手机服务密码一般是什么数字)

  • iphonex如何拍摄夜景(苹果x怎么拍)

    iphonex如何拍摄夜景(苹果x怎么拍)

  • 怎么设置台式机电源键(怎么设置台式机不休眠)

    怎么设置台式机电源键(怎么设置台式机不休眠)

  • 荣耀智慧屏和华为智慧屏有什么区别(荣耀智慧屏和华为智慧屏遥控器通用吗)

    荣耀智慧屏和华为智慧屏有什么区别(荣耀智慧屏和华为智慧屏遥控器通用吗)

  • ar地球仪怎么使用(ar地球仪如何使用)

    ar地球仪怎么使用(ar地球仪如何使用)

  • pr如何安装转场(pr如何安装转场插件)

    pr如何安装转场(pr如何安装转场插件)

  • 美团的津贴余额怎么用(美团的津贴余额在哪里看)

    美团的津贴余额怎么用(美团的津贴余额在哪里看)

  • 红米蓝牙耳机怎么恢復出厂(红米蓝牙耳机怎么重新配对双耳)

    红米蓝牙耳机怎么恢復出厂(红米蓝牙耳机怎么重新配对双耳)

  • 苹果id账户24小时恢复(苹果id账户24小时恢复结果是什么)

    苹果id账户24小时恢复(苹果id账户24小时恢复结果是什么)

  • 如何看netflix

    如何看netflix

  • 快手音乐怎么改成自己的作品原声(快手音乐怎么改标题)

    快手音乐怎么改成自己的作品原声(快手音乐怎么改标题)

  • 爱沙尼亚波罗的海 (© fotoman-kharkov/Getty Images)(爱沙尼亚的故事)

    爱沙尼亚波罗的海 (© fotoman-kharkov/Getty Images)(爱沙尼亚的故事)

  • CSDN接入AIGC辅助创作,对此你怎么看?

    CSDN接入AIGC辅助创作,对此你怎么看?

  • 个体户开增值税怎么开
  • 企业技术转让享受税收优惠政策应符合哪些条件
  • 结转销售成本的分录
  • 保险公司车险理赔款如何入账
  • 无进项开票税点
  • 短期借款属于经营性资产吗
  • 房屋出租的成本怎么算
  • 已报废的固定资产
  • 赠送车子需要过户吗
  • 已扣缴税额
  • 没有ca证书怎么连接wifi加密设备
  • 无形资产减值准备
  • 购买商品有运费的分录
  • 营改增租赁服务有哪些
  • 政府机关有纳税识别号吗
  • 公司的汽车购置税怎么交
  • 企业支出的资产包括哪些
  • 小米电视连不上路由器怎么回事
  • swstrtr.exe - swstrtr是什么进程
  • 预付账款是负数有什么税收风险
  • 预付款项属于什么会计要素
  • 房地产会计工资一般多少
  • adb是什么程序
  • 用公司资质应交什么费用
  • 建筑工程给排水的内容
  • 公司私户利息收入怎么算
  • 所有者权益变动表范本
  • 销售商品取得的货款
  • 工伤个人承担的费用
  • 在vue中获取dom元素
  • html六边形的盒子怎么做
  • PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
  • ps大型文件储存位置在哪
  • zarchiver 小米
  • 定额发票新旧版区别
  • 股权转让 减资
  • 简单设置w11
  • 织梦怎么用
  • python id 函数
  • php fgetc
  • 结息会计凭证怎么写
  • 非盈利机构怎么说
  • 生产型企业如何退税
  • 哪些企业不能核算成本
  • mysql创建存储过程sql语句
  • 股权并购与收购的区别
  • 本月发生费用未支付会计处理
  • 专家评审费如何入账
  • 跨月发票税率开错了如何处理合适?
  • 退回现金会计分录
  • 公司的在建工程入账会计分录没有付款
  • 管理费用收入缴纳增值税吗
  • 附报资料是什么
  • sql语句实现查询示例
  • sql导入和导出数据
  • 偷天换日角色介绍
  • windows mobile
  • 安装samba服务器步骤
  • win7适用ie几
  • win8.1优化工具
  • linux Intel 845集成显示驱动下载
  • js日期选择框
  • js观察者模式和发布订阅
  • 硬盘逻辑锁源码
  • jquery2
  • Node.js中的事件循环是什么
  • linux u+s
  • django的工作原理
  • java list和array list区别
  • javascript详细介绍
  • 安卓短信提示
  • js根据name取值
  • 欢迎使用本公司智能语音电动车mp3
  • python里list
  • 河南地税网上个税怎么交
  • 湖南低保查询网上查询
  • 如何查看税务登记记号
  • 税控发票证书密码是什么
  • 2020年青海国税工资待遇
  • 地税注销需要什么资料
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设