数学建模常用模型21:BP神经网络(三层)

给大家安利一款朋友开发的自研国产数据分析基础工具,一键式自动分析,自动生成分析模板,5分钟掌握主流61个统计类数学模型(几乎涵盖SPSS绝大部分功能),以及23个有监督机器学习(包括随机森林,SVM,XGBoost等)

PS:巨方便简单上手,貌似现在是免费

官网:www.mpaidata.com   mpai数据科学平台

 

在拥有一些数据的前提下,预测接下来的数据,在模型检验的时候用。
步骤:
1.    准备训练网络的样本。
2.    确定网络的初始参数,包括最大训练次数,隐含层神经元数量,网络学习速率,训练的目标误差,是否添加动量因子
3.    初始化网络的权值(w)和阈值(B)
4.    计算第一层神经元的输入和输出,对输入进行归一化处理
5.    计算第二层神经元的输入。对于第二层,神经元的输入 ${I_2}$一定来自第一层所有神经元的值和阈值的和,即

                                                         ${I_2} = {w_{ij}} \times X + {B_{ij}} \times ones$
6.    计算第二层神经元的输出。假设隐含层神经元激励函数为单机S形函数,即

                                                            

所以第二层的输出 

                                           
7.    计算第三层的输入输出:

                       ${I_3} = {w_{jk}} \times {O_2} + {B_{jk}} \times ones$     ${O_3} = {I_3}$   
8.    计算能量函数 

                                   $E = {\sum {(Y - {O_3})} ^2}$
9.    计算第二层与第三层之间权值和阈值调整量  

                                         

                                 
10.    计算第一层与第二层之间权值和阈值的调整量  

                                    数学建模常用模型21:BP神经网络(三层)_第1张图片
11.    计算调整之后的权值和阈值
把t时刻的各层权值和阈值加上各自的调整量赋予t+1时刻的权值和阈值: 

                   数学建模常用模型21:BP神经网络(三层)_第2张图片

12.    还原输出值。

案例如下:(此案例在《Matlab在数学建模比赛中的应用 》116页)

数学建模常用模型21:BP神经网络(三层)_第3张图片

 

数学建模常用模型21:BP神经网络(三层)_第4张图片

数学建模常用模型21:BP神经网络(三层)_第5张图片

数学建模常用模型21:BP神经网络(三层)_第6张图片

数学建模常用模型21:BP神经网络(三层)_第7张图片

数学建模常用模型21:BP神经网络(三层)_第8张图片

数学建模常用模型21:BP神经网络(三层)_第9张图片

数学建模常用模型21:BP神经网络(三层)_第10张图片

案例二

 

年份 2012 2013 2014
销售额 3517.72 4020.27 3997.2
% 产生训练样本与测试样本
input_train=[2012 2013 2014];
output_train=[3517.72 4020.27 3997.2];
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train); % 函数接口赋值
NodeNum = 49; % 隐层节点数
TypeNum = 1; % 输出维数
Epochs = 15000; % 训练次数
input_text=[2013 2014 2015];
% 设置网络参数
TF1 = 'radbas';
TF2 = 'purelin';
% TF1 = 'radbas';TF2 = 'purelin';
net = newff(minmax(inputn),[NodeNum TypeNum],{TF1 TF2},'trainlm'); % 指定训
练参数
net.trainParam.epochs = Epochs; % 最大训练次数
net.trainParam.goal = 1e-50; % 最小均方误差
net.trainParam.min_grad = 1e-20; % 最小梯度
net.trainParam.show = 200; % 训练显示间隔
net.trainParam.time = inf; % 大训练时间% 训练与测试
inputn_test=mapminmax('apply',input_text,inputps);
net = train(net,inputn,outputn); % 训练
X = sim(net,inputn_test) % 测试 - 输出为预测值
xiaobooutput=mapminmax('reverse',X,outputps)

 

你可能感兴趣的:(数学建模,算法)