基于广义回归神经网络的货运量预测

        大家好,我是带我去滑雪!

        广义回归神经网络(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:4
    perfp=[];
    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_max
            mse_max=mse(error);
            desired_spread=spread;
            desired_input=p_cv_train;
            desired_output=t_cv_train;
        end
        k=k+1;
    end
    result_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.0000

GRNN神经网络三项流量预测的误差为10987.9876      2548.04578      15100.8105

      GRNN的预测2008年的货运总量、铁路货运量、公路货运量分别为30747、15790、14175。


更多优质内容持续发布中,请移步主页查看。

若有问题可邮箱联系:1736732074@qq.com 

博主的WeChat:TCB1736732074

   点赞+关注,下次不迷路!

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于广义神经网络回归进行货运量预测的r语言代码如下: 首先,我们需要加载所需的库: ``` library("RSNNS") # 加载神经网络相关库 library("caret") # 加载数据预处理库 ``` 然后,我们开始进行数据预处理: ``` # 读取数据 data <- read.csv("data.csv") # 将数据分成训练集和测试集 set.seed(123) # 设置随机种子以保持结果的可重复性 trainIndex <- createDataPartition(data$Volume, p = 0.8, list = FALSE) trainData <- data[trainIndex, ] testData <- data[-trainIndex, ] # 进行数据的归一化 preprocessParams <- preProcess(trainData[, -1], method = c("center", "scale")) trainData <- predict(preprocessParams, trainData) testData <- predict(preprocessParams, testData) ``` 接下来,我们创建广义神经网络模型: ``` # 创建一个基于广义神经网络回归模型 model <- mlp(Volume ~ ., trainData, size = c(5), learnFunc = "SCG", maxit = 100, linOut = TRUE) ``` 然后,我们使用训练好的模型对测试集进行预测: ``` # 使用模型进行预测 predictions <- predict(model, testData) ``` 最后,我们可以评估模型的准确性: ``` # 计算R2值 r2 <- R2(predictions, testData$Volume) print(paste("R2:", r2)) ``` 以上就是基于广义神经网络回归进行货运量预测的r语言代码。这段代码首先进行数据的加载和预处理,然后使用RSNNS库创建神经网络模型,接着使用模型进行预测,并计算出预测结果的R2值作为评估指标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

(备考中,暂停更新)4.14 于武汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值