数学建模:MATLAB BP神经网络

一、简述

        BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,由 输入层、隐含层和输出层 构成 ,其中隐含层有一层或者多层。每一层可以有若干个节点。层与层之间节点的连接状态通过 权重来体现。

        正向传播:数据从输入端输入后,沿着网络的指向,乘以对应的权重后再加和,再将结果作为输入在激活函数中计算,将计算的结果作为输入传递给下一个节点。依次计算,直到得到最终结果,即为正向传播。

        用梯度下降法来训练神经网络,正向传播得到预测值,预测的结果与实际的结果存在误差,将误差沿着梯度下降的方向对权重进行调整,通过多次迭代调整各层权重值得到最终神经网络模型。

 

二、代码

clear
clc

%传入数据
openExample("spectra.mat")
load spectra.mat

%初始化训练集和测试集
index = randperm(60);

%对得到的训练集和测试集进行转置,确保每个数据集的列都表示样本的个数,用于构建神经网络
train_X = NIR(index(1 : 50), :)';
train_Y = octane(index(1 : 50), :)';

test_X = NIR(index(51 : end), :)';
test_Y = octane(index(51 : end), :)';

%测试集样本数
N = size(test_X, 2);

%%将数据进行归一化处理
%用mapminmax函数将每行数据映射到 [-1 1]区间内
%传入值中的0和1表示处理后矩阵的最小值和最大值;传出值PS表示允许一致处理值的处理设置;'apply'表示给定PS值和原数据,得到归一化后的数据;'reverse'表示给定PS值和归一化后的数据,得到原数据

%将训练集的X数据进行归一化处理
[train_x, PS_input] = mapminmax(train_X, 0, 1);
%用训练集得到的PS值对测试集的X数据也进行归一化处理
test_x = mapminmax('apply', test_X, PS_input);

%将训练集的Y数据进行归一化处理
[train_y, PS_output] = mapminmax(train_Y, 0, 1);


%%创建神经网络
%第三个传入参数表示隐含神经元的个数
net = newff(train_x, train_y, 9);

%迭代次数
epochs = 1000;
%训练目标:最小误差
train_goal = 1e-3;
%学习率
train_lr = 0.01;

%训练数据
net = train(net, train_x, train_y);

%测试
sim_y = sim(net, test_x);

%数据反归一化
sim_Y = mapminmax('reverse', sim_y, PS_output);

%计算相对误差
error = abs(sim_Y - test_Y) / test_Y;

%绘图
point_x = 1 : N;
plot(point_x, sim_Y, point_x, test_Y);

三、运行结果

性能

 

回归结果

 

预测值与真实值对比:红色实线为预测值,蓝色虚线为真实值

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值