📄 bp.m
字号:
%----------------------
%BP神经网络
%----------------------
close all;
clear all;
clc;
%为最后画图定义数据
X = [1991:1:2080];
Y = [1991:1:2080];
%初始化Y的部分数据为后面画图做准备
Y(1991-1990) = 1158230;
Y(2) = 1171710;
Y(3) = 1185170;
Y(4) = 1198500;
Y(5) = 1211210;
Y(6) = 1223890;
Y(7) = 1236260;
Y(8) = 1248100;
Y(9) = 1257860;
Y(10) = 1265830;
Y(11) = 1220559;
Y(12) = 1258951;
Y(13) = 1260498;
%输入的学习样本数据
P=[0.1158230 0.1171710 0.1185170 0.1198500 ;
0.1171710 0.1185170 0.1198500 0.1211210 ;
0.1185170 0.1198500 0.1211210 0.1223890 ;
0.1198500 0.1211210 0.1223890 0.1236260 ;
0.1211210 0.1223890 0.1236260 0.1248100 ;
0.1223890 0.1236260 0.1248100 0.1257860 ;
0.1236260 0.1248100 0.1257860 0.1265830 ;
0.1248100 0.1257860 0.1265830 0.1220559 ;
0.1257860 0.1265830 0.1220559 0.1258951 ;
0.1265830 0.1220559 0.1258951 0.1260498 ;
];
P = P';
%输出的学习样本数据目标
T=[0.1211210 0.1223890 0.1236260 0.1248100 0.1257860 0.1265830 0.1220559 0.1258951 0.1260498 0.1253065 ];
%BP网络设计
net = newff(minmax(P),[4,1],{'tansig','purelin'});%创建一个BP网络
%利用带动量,自适应学习速率的梯度下降法来训练网络
%数据训练前的网络拟合结果
A1 = sim(net,P);
%设置训练参数
net.trainFcn = 'traingdx';%设置训练函数,带动量,自适应学习速率的梯度下降法
net.trainParam.epochs = 10000; %迭代次数10000次
net.trainparam.goal = 1e-6;%设置训练的目标误差
net=train(net,P,T);%trainning
%数据训练后的网络拟合结果
disp('网络拟合的结果')
A2 = sim(net,P)
E = T - A2;
MSE = mse(E);%计算均方差误差性能值
disp('数据训练后的网络拟合结果误差')
E
disp('均方差误差性能值')
MSE
%验证数据
disp('验证数据')
pt = [0.1265830 0.1220559 0.1258951 0.1260498 ];
pt = pt';
A2004 = sim(net,pt);
E2004 = 0.1253065 - A2004;
disp('2004年的数据为:')
A2004
disp('E的值为:')
E2004
Y(2004-1990) = A2004*1e7;
%预测数据
in1 = 0.1220559;
in2 = 0.1258951;
in3 = 0.1260498;
in4 = A2004;
for i=2005:2080
pt = [in1 , in2 ,in3 ,in4];
pt = pt';
Y(i-1990) = sim(net,pt);
in1 = in2;
in2 = in3;
in3 = in4;
in4 = Y(i-1990);
Y(i-1990) = Y(i-1990)*1e7;
end
%作图
%记得在这里加个断点调试,不然会覆盖train图
Xlabel='年份';
Ylabel='人口数';
plot(X,Y,X,Y,'*');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -