丝毫不懂代码——BP神经网络(matlab)

该文段展示了一个利用BP神经网络进行训练和预测的过程。首先,数据被划分为训练集和测试集,然后进行归一化处理。接着,建立了具有tansig和purelin传递函数的神经网络模型,并配置了训练参数。训练完成后,对测试数据进行归一化并进行预测,最后分析了预测误差,包括MAE、MSE和RMSE的计算。
摘要由CSDN通过智能技术生成
%%设置训练数据和预测数据
input_train=input2(1:52,:)';%编号1-52数据作为测试组(x值)
output_train=output2(1:52,:)';%编号1-52数据作为测试组(y值)
input_test=input2(33:52,:)';%编号33-52数据作为检验组(x值)
output_test=output2(33:52,:)';%编号33-52数据作为检验组(y值)
%%节点个数
inputnum=17;%输入层节点个数
hiddennum=14;%隐含层节点个数
outputnum=1;%输出层节点个数
%%训练样本归一化
[inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用作下一次同样的归一化
[outputn,outputps]=mapminmax(output_train);
%%构建bp神经网络
net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');%建立模型,传递函数采用purelin,采用梯度下降
W1=net.iw{1,1};%输入层到中间层的权值
B1=net.b{1};%中间各神经元阈值

W2=net.lw{2,1};%中间层到输出层的权值
B2=net.b{2};%输出层各神经元阈值

%%网络参数配置
net.trainParam.epochs=1000;%训练次数为10000
net.trainParam.lr=0.01;%学习速率为0.0025
net.trainParam.goal=0.000001;%训练目标最小误差为0.000001

%%bp神经网络训练
net=train(net,inputn,outputn);

%%测试样本归一化
inputn_test=mapminmax('apply',input_test,inputps);

%%bp神经网络预测
an=sim(net,inputn_test);

%%预测结果反归一化与误差分析
test_simu=mapminmax('reverse',an,outputps);
error=test_simu-output_test;
error1=mapminmax(error,0,1);%对误差进行归一化


%%真实值与预测值误差比较
figure('units','normalized','position',[0.119 0.2 0.38 0.5])
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on 
plot(error1,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据组数')
ylabel('样本值')
title('预测值与实际值对比图')

[c,l]=size(output_test);
MAE1=sum(abs(error1))/l;
MSE1=error1*error1'/l;
RMSE1=MSE1^(1/2);
disp(['----------------误差计算------------------'])
disp(['隐含层节点数为',num2str(hiddennum),'时的误差如下'])
disp(['平均绝对误差MAE为',num2str(MAE1)])
disp(['均方误差MSE为',num2str(MSE1)])
disp(['均方根误差RMSE1为',num2str(RMSE1)])

%%disp('-------- 网络训练后的权重 ---------------')
w21  =  net.iw{1,1};               % 第1层(输入层)到第2层(隐层)的权值
b2   =  net.b{1};                  % 第2层(隐层)的阈值						          
w32  =  net.lw{2,1};              % 第2层(输入层)到第3层(输出层)的权值
b3   =  net.b{2};                  % 第3层(输出层)的阈值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值