%基于历年的地下水埋深预测模型的实现程序(选用十一号井)
%predict1.m,通辽市开鲁地区地下水 BP 网络预测.
%问题:用 BP 网络预测地下水 1981年到2010年共三十期数据 (1980年的不要)
%分析:30 期数据样本分成两组,每组 15 个,分别做为训练集(1981年到1995年)和测试集(1996 年到2010年)。设计 BP 网络有 5个输入,1 个输出。
%隐含层神经元数目采用试差法确定,经试验,隐含层神经数目为 10,即 BP 网络设计为 1-10-1
%用 1981年到1995年的15个数据训练集训练网络;经 1996年到2005年的 10个数据测试网络 (2005到2010为预测的数据)
close all
clc;
clear;
%按年份排列的地下水埋深
P0=[1.8358 2.0758 2.1725 2.2967 2.3075 2.0458 1.6708 1.2658 1.3275 1.5275 1.8133 1.7542 1.5667 1.5042 1.4242 1.4233 1.5233 1.4433 1.2833 1.5350 2.5275 3.0950 3.4800 3.9150 4.2433 4.6600 4.9908 5.7842 6.3092 6.3425 6.8450];
%绘制人均纯收入随年份的变化曲线
Year=1980:1:2010
plot(Year,P0)
pause
%将原始数据归一化到[0.2 0.9]
P1=0.2+(0.9-0.2).*(P0-min(P0))./(max(P0)-min(P0));
% 按每 5 年为一期组织样本,作为训练集,P 为输入,T为目标。从第 1980年的地下水位开始
j=0;
for i=1:5;
P(:,i)=P1(i+j:i+j+4); %取第 i 个训练样本,给 P
T(:,i)=P1(i+j+5); % P1为归一化后的数据
j=j+1;
end
P
T
pause
%按每 5 年为一期组织样本,作为测试集,testP 为输入,testT 为目标。从1995年地下水位开始。
j=0;
for i=1:4;
testP(:,i)=P1(i+j+15:i+j+19);
testT(:,i)=P1(i+j+21);
j=j+1;
end
testP
testT
%建立 BP 网络,可以设计为一个隐含层的 BP 网络,隐层神经元数为 10
net=newff(minmax(P),[10,1],{'logsig','logsig'},'traingdm')
%设置训练参数
net.trainParam.lr=0.6; %学习率
net.trainParam.epochs = 5000; %最大训练次数
net.trainParam.goal = 0.0001
%训练网络
net = train(net,P,T);
%仿真
Y=sim(net,testP) %将 1995 起的 10 组测试数据输入网络进行测试
E=testT-Y; %计算测试集网络输出和目标的误差
mse=MSE(E) %计算均方误差
%预测2006年到2010年之间的地下水位
% 以下有问题:
%预测2006年的地下水位
P06=P1(23:27)
%取预测数据,1998-2002 共 5 年,转置成列矢量
Y06=sim(net,P06)
%用 sim 仿真,计算 2006年地下水位(规一化值)
Y2006=min(P0)+(Y06-0.2)*(max(P0)-min(P0))/0.6
%求出人均纯收入实际值
E06=Y2006-4.9908 %计算误差
%预测 2007 年人均纯收入 (这里出了问题,不知道有何问题)
P07=P1(24:28)
Y07=sim(net,P07)
Y2007=min(P0)+(Y07-0.2)*(max(P0)-min(P0))/0.6;
E07=Y2007-5.7842
%预测 2008 年人均纯收入
P08=P1(25:29)'
Y08=sim(net,P08)
Y2008=min(P0)+(Y08-0.2)*(max(P0)-min(P0))/0.6;
E08=Y2008-6.3092
%预测 2009年人均纯收入
P09=P1(26:30)'
Y09=sim(net,P09)
Y2009=min(P0)+(Y09-0.2)*(max(P0)-min(P0))/0.6;
E09=Y2009-6.3425
%预测 2010 年人均纯收入
P10=P1(27:31)'
Y10=sim(net,P10)
Y2010=min(P0)+(Y10-0.2)*(max(P0)-min(P0))/0.6;
E07=Y2010-6.8450
%用 2006~2010 年的实际数据预测 2011 年人均纯收入
P11=P1(27:31)'
Y11=sim(net,P11)
Y2011=min(P0)+(Y11-0.2)*(max(P0)-min(P0))/0.6;
P2=[P0 Y2011];
%将 2007 年数据加入原始数据 P0 中
%year=[year 2011];
%将 2007 年加入年份中
figure
plot(year,P0,'g-.')
hold on
plot(year,P0,'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,p2,'g-.')
pause
disp('2008 年人均纯收入预测值为:'),y2008
disp('程序运行结束');
求哪位大神给调一下啊
%predict1.m,通辽市开鲁地区地下水 BP 网络预测.
%问题:用 BP 网络预测地下水 1981年到2010年共三十期数据 (1980年的不要)
%分析:30 期数据样本分成两组,每组 15 个,分别做为训练集(1981年到1995年)和测试集(1996 年到2010年)。设计 BP 网络有 5个输入,1 个输出。
%隐含层神经元数目采用试差法确定,经试验,隐含层神经数目为 10,即 BP 网络设计为 1-10-1
%用 1981年到1995年的15个数据训练集训练网络;经 1996年到2005年的 10个数据测试网络 (2005到2010为预测的数据)
close all
clc;
clear;
%按年份排列的地下水埋深
P0=[1.8358 2.0758 2.1725 2.2967 2.3075 2.0458 1.6708 1.2658 1.3275 1.5275 1.8133 1.7542 1.5667 1.5042 1.4242 1.4233 1.5233 1.4433 1.2833 1.5350 2.5275 3.0950 3.4800 3.9150 4.2433 4.6600 4.9908 5.7842 6.3092 6.3425 6.8450];
%绘制人均纯收入随年份的变化曲线
Year=1980:1:2010
plot(Year,P0)
pause
%将原始数据归一化到[0.2 0.9]
P1=0.2+(0.9-0.2).*(P0-min(P0))./(max(P0)-min(P0));
% 按每 5 年为一期组织样本,作为训练集,P 为输入,T为目标。从第 1980年的地下水位开始
j=0;
for i=1:5;
P(:,i)=P1(i+j:i+j+4); %取第 i 个训练样本,给 P
T(:,i)=P1(i+j+5); % P1为归一化后的数据
j=j+1;
end
P
T
pause
%按每 5 年为一期组织样本,作为测试集,testP 为输入,testT 为目标。从1995年地下水位开始。
j=0;
for i=1:4;
testP(:,i)=P1(i+j+15:i+j+19);
testT(:,i)=P1(i+j+21);
j=j+1;
end
testP
testT
%建立 BP 网络,可以设计为一个隐含层的 BP 网络,隐层神经元数为 10
net=newff(minmax(P),[10,1],{'logsig','logsig'},'traingdm')
%设置训练参数
net.trainParam.lr=0.6; %学习率
net.trainParam.epochs = 5000; %最大训练次数
net.trainParam.goal = 0.0001
%训练网络
net = train(net,P,T);
%仿真
Y=sim(net,testP) %将 1995 起的 10 组测试数据输入网络进行测试
E=testT-Y; %计算测试集网络输出和目标的误差
mse=MSE(E) %计算均方误差
%预测2006年到2010年之间的地下水位
% 以下有问题:
%预测2006年的地下水位
P06=P1(23:27)
%取预测数据,1998-2002 共 5 年,转置成列矢量
Y06=sim(net,P06)
%用 sim 仿真,计算 2006年地下水位(规一化值)
Y2006=min(P0)+(Y06-0.2)*(max(P0)-min(P0))/0.6
%求出人均纯收入实际值
E06=Y2006-4.9908 %计算误差
%预测 2007 年人均纯收入 (这里出了问题,不知道有何问题)
P07=P1(24:28)
Y07=sim(net,P07)
Y2007=min(P0)+(Y07-0.2)*(max(P0)-min(P0))/0.6;
E07=Y2007-5.7842
%预测 2008 年人均纯收入
P08=P1(25:29)'
Y08=sim(net,P08)
Y2008=min(P0)+(Y08-0.2)*(max(P0)-min(P0))/0.6;
E08=Y2008-6.3092
%预测 2009年人均纯收入
P09=P1(26:30)'
Y09=sim(net,P09)
Y2009=min(P0)+(Y09-0.2)*(max(P0)-min(P0))/0.6;
E09=Y2009-6.3425
%预测 2010 年人均纯收入
P10=P1(27:31)'
Y10=sim(net,P10)
Y2010=min(P0)+(Y10-0.2)*(max(P0)-min(P0))/0.6;
E07=Y2010-6.8450
%用 2006~2010 年的实际数据预测 2011 年人均纯收入
P11=P1(27:31)'
Y11=sim(net,P11)
Y2011=min(P0)+(Y11-0.2)*(max(P0)-min(P0))/0.6;
P2=[P0 Y2011];
%将 2007 年数据加入原始数据 P0 中
%year=[year 2011];
%将 2007 年加入年份中
figure
plot(year,P0,'g-.')
hold on
plot(year,P0,'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,p2,'g-.')
pause
disp('2008 年人均纯收入预测值为:'),y2008
disp('程序运行结束');
求哪位大神给调一下啊