%predict2.m,人均纯收入BP网络预测.
%问题:用BP网络预测人均纯收入.
%分析:12期数据样本分成两组,每组10个,分别做为训练集(1996年开始)
%隐含层神经元数目采用试差法确定,经试验,隐含层神经数目为10,即BP网
%用1996年开始的10个训练集训练网络,经1998年开始的10个测试集测试。
close all
clc;
clear;
%按年份排列的原始人均纯收入数据
t0=[5.46 5.52 5.56 5 5.5 6.03 6.04 5.92 5.8 6.38 7.02 6.74]
%绘制人均纯收入随年份的变化曲线
year=1996:2007;
plot(year,t0,'b+')
hold on
plot(year,t0,'b')
pause
%p、t、testp、testt为处理后的数据,处理程序为chuli.m。
p=[ 0.2658 0.2706 0.2686 0.2707 0.2745 0.2711 0.2656 0.2719 0.2692 0.3138
0.3018 0.2887 0.2906 0.2981 0.3462 0.4606 0.4118 0.3831 0.3281 0.6412
0.2699 0.2699 0.2699 0.2699 0.2698 0.2717 0.2702 0.2699 0.2699 0.2711
0.2697 0.2697 0.2703 0.2666 0.2706 0.2747 0.2677 0.2693 0.2697 0.2683
0.2698 0.2700 0.2700 0.2700 0.2699 0.2699 0.2700 0.2699 0.2700 0.2699];
t=[ 0.6112 0.6150 0.6175 0.5825 0.6137 0.6469 0.6475 0.6400 0.6325 0.6687];
testp=[ 0.2686 0.2707 0.2745 0.2711 0.2656 0.2719 0.2692 0.3138 0.3534 0.2000
0.2906 0.2981 0.3462 0.4606 0.4118 0.3831 0.3281 0.6412 0.8662 0.9000
0.2699 0.2699 0.2698 0.2717 0.2702 0.2699 0.2699 0.2711 0.2708 0.2743
0.2703 0.2666 0.2706 0.2747 0.2677 0.2693 0.2697 0.2683 0.2697 0.2702
0.2700 0.2700 0.2699 0.2699 0.2700 0.2699 0.2700 0.2699 0.2699 0.2699];
testt=[0.6175 0.5825 0.6137 0.6469 0.6475 0.6400 0.6325 0.6687 0.7087 0.6912]
%建立BP网络,可以设计为一个隐含层的BP网络,隐层神经元数为9
net=newff(minmax(p),[5 1],{'logsig','logsig'},'traingdm');
%设置训练参数
net.trainParam.show=50;
net.trainParam.lr=0.6;%学习率
net.trainParam.epochs=10000;%最大训练次数
net.trainParam.goal=1e-6;%目标误差
%训练网络
net=train(net,p,t);
%仿真
y=sim(net,testp);%将1998起的10组测试数据输入网络进行测试
E=testt-y;%计算测试集网络输出和目标的误差
mse=MSE(E)%计算均方误差
%预测2003年人均纯收入
p03=[0.2719;0.3831;0.2699;0.2693;0.2699];%取预测数据
y03=sim(net,p03)%用sim仿真,计算2003年人均纯收入(规一化值)
y2003=min(t0)+(y03-0.2)*(max(t0)-min(t0))/0.6;%求出人均纯收入实际值
E03=y2003-5.92%计算误差
%预测2004年人均纯收入
p04=[0.2692;0.3281;0.2699;0.2697;0.2700];
y04=sim(net,p04)
y2004=min(t0)+(y04-0.2)*(max(t0)-min(t0))/0.6;
E04=y2004-5.8
%预测2005年人均纯收入
p05=[0.3138;0.6412;0.2711;0.2683;0.2699];
y05=sim(net,p05)
y2005=min(t0)+(y05-0.2)*(max(t0)-min(t0))/0.6;
E05=y2005-6.38
%预测2006年人均纯收入
p06=[0.3534;0.8662;0.2708;0.2697;0.2699];
y06=sim(net,p06)
y2006=min(t0)+(y06-0.2)*(max(t0)-min(t0))/0.6;
E06=y2006-7.02
%预测2006年人均纯收入
p07=[0.2000;0.9000;0.2743;0.2702;0.2699];
y07=sim(net,p07)
y2007=min(t0)+(y07-0.2)*(max(t0)-min(t0))/0.6;
E07=y2007-6.74
%预测2008年人均纯收入
p08=[0.9000;0.9000;0.9000;0.2000;0.9000];
y08=sim(net,p08)
y2008=min(t0)+(y08-0.2)*(max(t0)-min(t0))/0.6;
t2=[t0 y2008];%将2008年数据加入原始数据p0中
%year=[year 2008];%将2008年加入年份中
figure
plot(year,t0,'g-')
hold on
plot(year,t0,'g+')
hold on
plot(2003,y2003,'ro')%用红色0绘制2003年预测的数据点。
plot(2004,y2004,'ro')
plot(2005,y2005,'ro')
plot(2006,y2006,'ro')
plot(2007,y2007,'ro')
plot(2008,y2008,'ro')
year=[year 2008];
plot(year,t2,'g-')
%pause
disp('2008年人均纯收入预测值为:'),y2008
disp('程序运行结束');
评论0