货运量预测"/>
基于广义回归神经网络的货运量预测
大家好,我是带我去滑雪!
广义回归神经网络(GRNN)是径向基神经网络的一种,GRNN具有很强的非线性映射能力和柔性网络结构以及高度的容错性和鲁棒性,适合解决非线性问题。GRNN在逼近能力和学习速度上较RBF网络有更强的优势,网络最后收敛性于样本量积聚较多的优化回归面,并且在样本数据较少时,预测效果也较好。此外,网络还可以处理不稳定的数据,因此GRNN在各个领域得到广泛的应用。本次使用GRNN对中国货运量进行预测。
目录
(1)货运量预测背景
(2)模型建立
(3)代码实现
(1)货运量预测背景
常用的货运量预测方法包括时间序列方法、移动平滑法、指数平滑法、随机时间序列方法、回归分析法以及灰色预测方法和多种方法综合的组合预测方法等。这些方法都集中在对其因果关系回归和时间序列模型的分析上,所建立的模型并不能全面、科学和本质地反映所预测动态数据的内在结构和复杂性,丢失了信息量。人工神经网络作为一种并行的计算模型,具有传统建模方法所不具备的很多有点:对被建模对象的先验知识要求不多,一般不必知道有关被建模对象的结构、参数、动态特性等方面的知识,只需要给出对象的输入、输出数据,通过网络本身的学习功能就可以达到输入与输出的完全符合。
(2)模型建立
根据货运量影响因素的分析,分别选取国内生产总值、工业总产值、铁路运输路线长度、复线里程比重、公路运输路线长度、等级公路比重、铁路货车数量与民用载货汽车数量共8项指标因素作为网络输入,以货运总量、铁路货运量和公路货运量3项指标因素作为网络输出,构建GRNN。数据使用1996-2007年某地历史数据作为网络训练数据,2008年的数据作为网络的外推测试样本。由于训练的数据较少,采取交叉验证方法训练GRNN神经网络,并利用循环找出最佳的参数。
(3)代码实现
clc;
clear all
close all
nntwarn off;%% 载入数据
load data;
% 载入数据并将数据分成训练和预测两类
p_train=p(1:12,:);
t_train=t(1:12,:);
p_test=p(13,:);
t_test=t(13,:);
%% 交叉验证
desired_spread=[];
mse_max=10e20;
desired_input=[];
desired_output=[];
result_perfp=[];
indices = crossvalind('Kfold',length(p_train),4);
h=waitbar(0,'正在寻找最优化参数....');
k=1;
for i = 1:4perfp=[];disp(['以下为第',num2str(i),'次交叉验证结果'])test = (indices == i); train = ~test;p_cv_train=p_train(train,:);t_cv_train=t_train(train,:);p_cv_test=p_train(test,:);t_cv_test=t_train(test,:);p_cv_train=p_cv_train';t_cv_train=t_cv_train';p_cv_test= p_cv_test';t_cv_test= t_cv_test';[p_cv_train,minp,maxp,t_cv_train,mint,maxt]=premnmx(p_cv_train,t_cv_train);p_cv_test=tramnmx(p_cv_test,minp,maxp);for spread=0.1:0.1:2;net=newgrnn(p_cv_train,t_cv_train,spread);waitbar(k/80,h);disp(['当前spread值为', num2str(spread)]);test_Out=sim(net,p_cv_test);test_Out=postmnmx(test_Out,mint,maxt);error=t_cv_test-test_Out;disp(['当前网络的mse为',num2str(mse(error))])perfp=[perfp mse(error)];if mse(error)<mse_maxmse_max=mse(error);desired_spread=spread;desired_input=p_cv_train;desired_output=t_cv_train;endk=k+1;endresult_perfp(i,:)=perfp;
end;
close(h)
disp(['最佳spread值为',num2str(desired_spread)])
disp(['此时最佳输入值为'])
desired_input
disp(['此时最佳输出值为'])
desired_output
%% 采用最佳方法建立GRNN网络
net=newgrnn(desired_input,desired_output,desired_spread);
p_test=p_test';
p_test=tramnmx(p_test,minp,maxp);
grnn_prediction_result=sim(net,p_test);
grnn_prediction_result=postmnmx(grnn_prediction_result,mint,maxt);
grnn_error=t_test-grnn_prediction_result';
disp(['GRNN神经网络三项流量预测的误差为',num2str(abs(grnn_error))])
save best desired_input desired_output p_test t_test grnn_error mint maxt
(4)输出结果
此时最佳输入值为
desired_input =
-1.0000 -0.9578 -0.8593 -0.7570 -0.2682 0.1779 0.3968 0.6723 1.0000
-0.9550 -0.9998 -1.0000 -0.1291 0.2070 0.5137 0.6187 0.7838 1.0000
-1.0000 -1.0000 -0.8616 -0.4969 0.1950 0.4465 0.6478 0.6604 1.0000
-1.0000 -1.0000 -0.5385 -0.0769 0.2308 0.3846 0.6923 0.6923 1.0000
-1.0000 -0.9749 -0.9185 -0.8934 -0.5737 -0.0157 0.2602 0.5674 1.0000
-1.0000 -0.7391 -0.7391 -0.7391 -0.1304 0.1304 0.3043 0.5652 1.0000
0.0114 0.0141 -1.0000 0.0187 0.2477 0.4944 0.6195 0.7735 1.0000
-1.0000 -0.7677 -0.6979 -0.6639 -0.5720 -0.1527 0.0881 0.3674 1.0000此时最佳输出值为
desired_output =
-1.0000 -0.9931 -0.9771 -0.9770 -0.4453 0.0160 0.2887 0.5410 1.0000
-1.0000 -0.9401 -0.8469 -0.8046 -0.3532 -0.0446 0.2360 0.4292 1.0000
-1.0000 -0.9512 -0.7580 -0.7602 -0.2167 0.0650 0.2688 0.4823 1.0000GRNN神经网络三项流量预测的误差为10987.9876 2548.04578 15100.8105
GRNN的预测2008年的货运总量、铁路货运量、公路货运量分别为30747、15790、14175。
更多优质内容持续发布中,请移步主页查看。
点赞+关注,下次不迷路!
更多推荐
基于广义回归神经网络的货运量预测
发布评论