代码分析:
clear all;close;clc
%% 读取数据
%p为输入 t为输出
p=randi(20,[200,2]);%产生大小为1至20之间 维度为200*2的伪随机数矩阵
t=p(:,1)+p(:,2);
%% 训练集和测试集
p_train=p(1:190,:)';
p_test=p(191:end,:)';
t_train=t(1:190,:)';
t_test=t(191:end,:)';
%% 节点个数
inum=2;%输入层
hnum=5;%隐藏层
onum=1;%输出层
%% 训练集输入输出数据归一化
[P_train,PS]=mapminmax(p_train);%首字母大写:归一化后的数据
[T_train,TS]=mapminmax(t_train);
%% 构建BPnet框架 参数配置
net=newff(P_train,T_train,hnum);
view(net)
net.trainParam.epochs=1000;%迭代次数
net.trainParam.lr=0.01;%学习率
net.trainParam.goal=0.00001;%最小目标误差(均方误差)
%% BPnet训练
net=train(net,P_train,T_train);%根据上述参数对net进行训练
%% 测试集输入数据归一化
P_test=mapminmax('apply',p_test,PS);
%% BPnet预测
T_test_predict=sim(net,P_test);
%% 预测值反归一化
t_test_predict=mapminmax('reverse',T_test_predict,TS);
%% 误差:真实值-预测值
error=t_test-t_test_predict;
mse=error*error'/size(error,2);%均方误差
%% 对比图
hold on
plot(t_test,'bo-');
plot(t_test_predict,'r*-');
plot(error,'k');
legend('真实值','预测值','误差');
xlabel('数据组数');
ylabel('样本值');
title('BPnet预测值与真实值的对比图');