基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测 -附代码

article/2025/9/29 1:13:35

基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测

文章目录

  • 基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测
    • 1.GRNN 神经网络概述
    • 2.GRNN 的网络结构
    • 3.GRNN的理论基础
    • 4.运输系统货运量预测相关背景
    • 5.模型建立
    • 6.麻雀搜索算法优化GRNN
    • 7.实验结果
    • 8.参考文献
    • 9.Matlab代码

摘要:本文介绍基于麻雀搜索算法优化的广义神经网络(GRNN)预测,并将其应用于货物量预测

1.GRNN 神经网络概述

广义回归神经网络 CGRNN, Generalized Regression Neural Network)是美国学者 Don­aid F. Specht 在 1991 年提出的,它是径向基神经网络的一种。 GRNN 具有很强的非线性映射能力和柔性网络结构以及高度的容错性和鲁棒性,适用于解决非线性问题。 GRNN在逼近 能力和学习速度上较 RBF 网络有更强的优势,网络最后收敛于样本量积聚较多的优化回归 面,并且在样本数据较少时,预测效果也好。此外,网络还可以处理不稳定的数据。因此, GRNN 在信号过程、结构分析、教育产业、能源、食品科学、控制决策系统、药物设计、金融领域、生物工程等各个领域得到了广泛的应用 。

2.GRNN 的网络结构

GRNN 在结构上与 RBF 网络较为相似。它由四层构成,如图1所示,分别为输入层(input layer)、模式层( pattern layer)、求和层 ( summation layer)和输出层( output layer)。对 应网络输入 X = [ x 1 , x 2 , . . . , x n ] T X = [x_1,x_2,...,x_n]^T X=[x1,x2,...,xn]T,其输出为 Y = [ y 1 , y 2 , . . . , y n ] T Y = [y_1,y_2,...,y_n]^T Y=[y1,y2,...,yn]T

在这里插入图片描述

图1 .GRNN网络结构

(1)输入层

输入层神经元的数目等于学习样本中输入向量的维数,各神经元是简单的分布单元,直接将输入变量传递给模式层。

(2)模式层

模式层神经元数目等于学习样本的数目 η ,各神经元对应不 同的样本,模式层神经元传递函数为:
p i = e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] i = 1 , 2 , . . . , n (1) p_i = exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}] i =1,2,...,n \tag{1} pi=exp[2σ2(XXi)T(XXi)]i=1,2,...,n(1)
神经元 i i i 的输出为输入变量与其对应的样本 X X X 之间 Euclid 距离平方的指数平方 D i 2 = ( X − X i ) T ( X − X i ) D_i^2= (X-X_i)^T(X-X_i ) Di2(XXi)T(XXi 的指数形式 。式中, X X X 为网络输入变量; X i X_i Xi 为第 i 个神经元对应的学习样本。

(3)求和层

求和层中使用两种类型神经元进行求和。

一类的计算公式为 ∑ i = 1 n e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] \sum_{i=1}^n exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}] i=1nexp[2σ2(XXi)T(XXi)],它对所有模式层神经元的输出进行算术求和,其模式层与各神经元的连接权值为1 ,传递函数为:
S D = ∑ i = 1 n P i (2) S_D = \sum_{i=1}^nP_i\tag{2} SD=i=1nPi(2)
另 一类计算公式为 ∑ i = 1 n Y i e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] \sum_{i=1}^nY_i exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}] i=1nYiexp[2σ2(XXi)T(XXi)],它对所有模式层的神经元进行加权求和,模式层中第 i 个神经元与求和层中第 j 个分子求和神经元之间的连接权值为第 i 个输 出样本 Y i Y_i Yi中的第 j 个元素,传递函数为:
S N j = ∑ i = 1 n y i j P i , j = 1 , 2 , . . . , k (3) S_{Nj} = \sum_{i=1}^n y_{ij}P_i ,j = 1,2,...,k\tag{3} SNj=i=1nyijPi,j=1,2,...,k(3)
(4)输出层

输出层中的神经元数目等于学习样本中输出向量的维数h ,各神经元将求和层的输出相除 , 神经元 j 的输出对应估计结果Y( X) 的第 j 个元素,即:
y j = S N j S D , j = 1 , 2 , . . . , k (4) y_j = \frac{S_{Nj}}{S_D},j=1,2,...,k \tag{4} yj=SDSNj,j=1,2,...,k(4)

3.GRNN的理论基础

广义回归神经网络的理论基础是非线性回归分析 , 非独立变量 Y 相对于独立变量x的回归分析实际上是计算具有最大概率值的 y. 设随机变量x和随机变量 y 的联合概率密度函数 为f(x,y),已知 x 的观测值为 X ,则 y 相对于 X 的回归,也即条件均值为:

KaTeX parse error: \tag works only in display equations

Y即为在输入为 X 的条件下,Y 的预测输出 。

应用 Parzen 非参数估计,可由样本数据集 x i , y i i = 1 n {x_i,y_i}_{i=1}^n xi,yii=1n估算密度函数 f ′ ( X , y ) f'(X,y) f(X,y)
f ′ ( X , y ) = ∑ i = 1 n e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] e x p [ − ( X − Y i ) 2 2 σ 2 ] / ( n ( 2 π ) p + 1 2 σ p + 1 ) (6) f'(X,y) =\sum_{i=1}^n exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}]exp[-\frac{(X-Y_i)^2}{2\sigma^2}]/(n(2\pi)^{\frac{p+1}{2}}\sigma^{p+1}) \tag{6} f(X,y)=i=1nexp[2σ2(XXi)T(XXi)]exp[2σ2(XYi)2]/(n(2π)2p+1σp+1)(6)
式中, X i X_i Xi Y i Y_i Yi, 为随机变量 x 和 y 的样本观测值; n n n为样本容量; p p p为随机变量 x x x的维数; σ σ σ为高斯函数的宽度系数,在此称为光滑因子。

f ( X , y ) f(X,y) f(X,y)代替 f ( X , y ) f(X,y) f(X,y)代人式,并交换积分与加和的顺序:
Y ( X ) = ∑ i = 1 n e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] ∫ − ∞ ∞ y e x p [ − ( Y − Y i ) 2 / ( 2 σ 2 ) ] d y ∑ i = 1 n e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] ∫ − ∞ ∞ e x p [ − ( Y − Y i ) 2 / ( 2 σ 2 ) ] d y (7) Y(X) = \frac{\sum_{i=1}^n exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}]\int_{-\infty}^{\infty}yexp[-(Y-Y_i)^2/(2\sigma^2)]dy}{\sum_{i=1}^n exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}]\int_{-\infty}^{\infty}exp[-(Y-Y_i)^2/(2\sigma^2)]dy}\tag{7} Y(X)=i=1nexp[2σ2(XXi)T(XXi)]exp[(YYi)2/(2σ2)]dyi=1nexp[2σ2(XXi)T(XXi)]yexp[(YYi)2/(2σ2)]dy(7)
由于 ∫ − ∞ ∞ z e − x 2 d z = 0 \int _{-\infty}^{\infty}ze^{-x^2}dz = 0 zex2dz=0,对两个积分进行计算后可得网络的输出Y(X)为:
Y ( X ) = ∑ i = 1 n Y i e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] ∑ i = 1 n e x p [ − ( X − X i ) T ( X − X i ) 2 σ 2 ] (8) Y(X) = \frac{\sum_{i=1}^nY_i exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}]}{\sum_{i=1}^n exp[-\frac{(X-X_i)^T(X-X_i)}{2\sigma^2}]} \tag{8} Y(X)=i=1nexp[2σ2(XXi)T(XXi)]i=1nYiexp[2σ2(XXi)T(XXi)](8)
估计值 Y ( X ) Y(X) Y(X)为所有样本观测值 Y i Y_i Yi的加权平均,每个观测值 Y i Y_i Yi的权重因子为相应的样本 X i X_i Xi X X X之间 Euclid 距离平方的指数 . 当光滑因子 σ 非常大的时候 , Y ( X ) Y(X) Y(X)近似于所有样本因变量的均值 。 相反,当光滑因子σ 。趋向于0 的时候, Y ( X ) Y(X) Y(X)和训练样本非常接近,当需预测的点被包含在训练样本集中时,公式求出的因变量的预测值会和样本中对应的因变量非常接近, 而一旦碰到样本中未能包含进去的点,有可能预测效果会非常差 , 这种现象说明网络的泛化能力差。当σ取值适中,求预测值 Y ( X ) Y(X) Y(X)时,所有训练样本的因变量都被考虑了进去,与预测点距离近的样本点对应的因变量被加了更大的权。

4.运输系统货运量预测相关背景

运输系统作为社会经济系统中的一个子系统,在受外界因素影响和作用的同时 , 对外部经济系统也具有一定的反作用,使得运输需求同时受到来自运输系统内外两方面因素的影响。 作为运输基础设施建设投资决策的基础,运输需求预测在国家和区域经济发展规划中,具有十分重要的作用,其中,由于货物运输和地方经济及企业发展的紧密联系,货运需求预测成为货 运需求和经济发展关系研究中的一个重要问题 。因此,作为反映货物运输需求的一项重要指标,货运量预测研究和分析具有较强的实际和理论意义 .

在此情况下,国内一些学者将神经网络引入到货运量预测中来。GRNN 在逼近能力、分类能力和学习速度方面具有较强优势 , 网络最后收敛于样本量积聚最多的优化回归面,并且在数据缺乏时效果也较好。网络可以处理不稳定的数据 , 因此本案例采用 GRNN 建立了货运量预测模型 , 并利用历史统计数据对货运量进行预测 。

5.模型建立

根据货运量影响因素的分析,分别取国内生产总值( GDP)、工业总产值、铁路运输线路长度、复线里程比重、公路运输线路长度、等级公路比重、铁路货车数量和民用载货汽车数量 8 项 指标因素作为网络输入,以货运总量、铁路货运量和公路货运量 3 项指标因素作为网络输出 , 构建 GRNN。本案例中 data. mat 中共有 p, t 两组数据 ,又各含 13 组数据,代表了 1996-2008 年的货 运量和与其相关的各个变量值。将 p、t 的前 12 组数据作为网络的训练数据,最后 1 组数据作 为网络的预测数据,建立 GRNN 神经网络对货运量进行预测。

6.麻雀搜索算法优化GRNN

麻雀搜索算法的具体原理参考博客:https://blog.csdn.net/u011835903/article/details/108830958。

网络训练时,采用交叉验证的方式,优化参数主要是GRNN的光滑因子 σ \sigma σ参数。是适应度函数设计为:
f i t n e s s = a r g m i n ( M S E p r i d e c t ) fitness = argmin(MSE_{pridect}) fitness=argmin(MSEpridect)
适应度函数选取训练后的MSE误差。MSE误差越小表明预测的数据与原始数据重合度越高。最终优化的输出为,最佳训练集以及对应的光滑因子。

7.实验结果

麻雀搜索算法的参数设置如下:

%% 麻雀搜索算法
pop = 20;%种群数量
Max_iteration = 20;%最大迭代次数
lb = 0.1;%下边界
ub = 2;%上边界
dim = 1;%维度
fobj = @(spread) fun(spread,p_train,t_train,indices);

经过麻雀搜索算法优化的结果:

在这里插入图片描述

最佳训练集信息:
此时最佳输入值为desired_input =-1.0000   -0.8993   -0.7948   -0.2955   -0.0574    0.3838    0.6652    0.8767    1.0000-0.9998   -1.0000   -0.1291    0.2070    0.3417    0.6187    0.7838    0.9372    1.0000-1.0000   -0.8616   -0.4969    0.1950    0.3333    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-1.0000   -0.9429   -0.9175   -0.5937   -0.3270    0.2508    0.5619    0.7333    1.0000-1.0000   -1.0000   -1.0000   -0.3000   -0.2000    0.2000    0.5000    0.8000    1.00000.0141   -1.0000    0.0187    0.2477    0.3682    0.6195    0.7735    0.8635    1.0000-1.0000   -0.9211   -0.8826   -0.7786   -0.6099   -0.0318    0.2843    0.5891    1.0000此时最佳输出值为desired_output =-1.0000   -0.9839   -0.9838   -0.4503   -0.2463    0.2862    0.5394    0.7787    1.0000-1.0000   -0.9040   -0.8604   -0.3950   -0.2293    0.2124    0.4116    0.7228    1.0000-1.0000   -0.8020   -0.8042   -0.2471   -0.0500    0.2505    0.4693    0.8308    1.0000GRNN神经网络三项流量预测的误差为13244.4881      4211.69012      15766.2697

未经过麻雀搜索的结果为:

GRNN神经网络三项流量预测的误差为28106.967 15245.9913 21653.0687(数据来源于《MATLAB神经网络43个案例分析》)

从结果来看,麻雀优化后取得的结果GRNN神经网络三项流量预测的误差为13244.4881 4211.69012 15766.2697明显更优,误差大大减少。

8.参考文献

书籍《MATLAB神经网络43个案例分析》

9.Matlab代码

[基于麻雀搜索算法优化的广义回归神经网络(GRNN)预测]
[基于鲸鱼算法优化的广义回归神经网络(GRNN)预测]
个人资料介绍


http://chatgpt.dhexx.cn/article/e9a0vuFB.shtml

相关文章

广义回归神经网络(GRNN)的数据预测

广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好, 网络还可以处理不稳定数…

神经网络(一):GRNN广义回归神经网络理论概念笔记

GRNN广义回归神经网络以及相关概念 https://blog.csdn.net/zengxiantao1994/article/details/72787849 https://blog.csdn.net/guoyunlei/article/details/76101899参考博客 小小白入坑系列,欢迎大佬的指教! 算法网上铺天盖地的,我只是把自己对算法的理…

【GRNN回归预测】基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测【含Matlab源码 2132期】

⛄一、GRNN模型 GRNN是一种非线性回归的前馈式神经网络。通常是由输入层、模式层、求和层和输出层构成。GRNN算法在运算速度与学习能力上比径向基函数神经网络(radial basis function, RBF)、反向传播神经网络(back propagation, BP)更强,广泛应用于系统辨识、预测…

神经网络学习笔记(二)GRNN广义回归神经网络

广义回归神经网络(GRNN) 广义回归神经网络是径向基神经网络的一种,GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测…

GRNN神经网络概述

GRNN,General Regression Neural Network,即广义回归神经网络,最早是由美国的Donald F.Specht教授于1991年提出的基于非线性的回归理论的人工神经网络模型[47,48]。GRNN广义回归神经网络具有较好的网络适应能力,从而使得神经网络能…

广义回归神经网络GRNN回归预测-MATLAB代码实现

一、GRNN简介 广义回归神经网络(General Regression Neural Network, GRNN)是1991年提出的基于径向基函数(Radial Basis Fuction,RBF)网络的一种改进形式,与径向基函数网络相比,其训练更为方便…

广义回归神经网络(GRNN)的实现(Python,附源码及数据集)

文章目录 一、理论基础1、广义回归神经网络结构2、输入层3、模式层4、求和层5、输出层6、优化思路 二、广义回归神经网络的实现1、实现过程(GRNN.py)2、预测结果3、参考源码及实验数据集 一、理论基础 广义回归神经网络(Generalized Regress…

【机器学习】广义回归神经网络(GRNN)的python实现

【机器学习】广义回归神经网络(GRNN)的python实现 一、广义回归神经网络原理1.1、GRNN与PNN的关系2.2、GRNN的网络结构二、广义回归神经网络的优点与不足2.1、优点2.2、不足三、GRNN的python实现参考资料一、广义回归神经网络原理 1.1、GRNN与PNN的关系 广义回归神经网络(…

C++ Unique函数 详细

unique函数是STL中比较实用的函数之一 包含该函数的函数头文件为 #include <algorithm>2 unique函数可以删除有序数组中的重复元素。 注意&#xff1a; a 这里的删除不是真的delete&#xff0c;而是将重复的元素放到容器末尾 b unique函数的返回值是去重之后的尾地址 c…

c++的unique函数

unique是 c标准模板库STL中十分实用的函数之一&#xff0c;使用此函数需要 #include <algorithm> 该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素&#xff0c;注意 (1) 这里的去除并非真正意义的erase&#xff0c;而是将重复的元素放到容器的末尾&…

SQL查询JSON格式的字段值 JSON_UNQUOTE与JSON_EXTRACT 去除SQL中双引号

一、最常用的就是 JSON_EXTRACT()函数&#xff0c;用于提取字段值 selectJSON_EXTRACT(a.info,"$.Score")fromjsontest awhereJSON_EXTRACT(a.info,"$.name") "Bob" 二、JSON_UNQUOTE 去除 SQL 中 " " ? MySQL自5.7之后开始支持js…

unique函数的用法

unique函数是用于将矩阵数据中的相同元素删除&#xff0c;只留下不相同的唯一元素。 1.例如: 得到的B矩阵为&#xff1a; 这个相对简单&#xff0c;但是有时需要将矩阵中的元素相同行的删除&#xff0c;也可以用到unique 2.当需要删除矩阵中的出现多次的行数组时 例如&#x…

c++ unique函数详解

unique是 c标准模板库STL中十分实用的函数之一&#xff0c;使用此函数需要#include <algorithm>头文件 该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素 (1) 这里的去除并非真正意义的erase&#xff0c;而是将重复的元素放到容器的末尾&#xff0c;返回值…

unique函数用法

unique函数用法 unique包含在头文件 #include <algorithm>函数作用&#xff1a;“去除”容器或数组中相邻元素之间重复出现的元素 unique函数的三个参数&#xff1a; 1、想要去重的数据集的起始地址 2、想要去重的最后一个元素的下一个元素的地址 3、比较函数(可以省…

MySQL JSON_EXTRACT()、JSON_UNQUOTE() 函数获取JSON串的值

JSON_EXTRACT()函数作用是读取数据库储存的json值&#xff0c;已key、value的形式获取某个键值 如果json字符串是对象{Object} 1&#xff1a;第一个参数为需要查询的json字段 2&#xff1a;第二个参数为json里需要获取的键名 $.key 如果json字符串是数组[Array] 1&#xff1a;…

c++ unique函数

unique函数属于STL中比较常用函数&#xff0c;它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除&#xff0c;并不是真的删除&#xff0c;而是指重复元素的位置被不重复的元素给占领了(详细情况&#xff0c;下面会讲)。由于它”删除”的是相邻的…

ubuntu启动后一直黑屏

好奇怪的一件事&#xff0c;昨晚使用完ubuntu后&#xff0c;和往常一样拍了快照&#xff0c;但今天打开后就一直黑屏&#xff0c;就突然的有了自己的思想&#xff0c;任我重启电脑都没有任何用处 我采用的方法 徽标cmd回车&#xff0c;输入如下命令,然后重启电脑 netsh winsoc…

ubuntu虚拟机开机黑屏系列解决办法

ubuntu虚拟机开机黑屏系列解决办法 前记解决方法方法一&#xff1a;方法二&#xff1a;方法三&#xff1a;方法四&#xff1a;方法五&#xff1a;方法六&#xff1a; 后记 前记 ubuntu虚拟机玩的好好的&#xff0c;突然不知怎么着图形界面就卡住了&#xff0c;等待了好一会也不…

记录ubuntu启动黑屏,仅有左上角光标闪烁的解决过程

去年装完显卡驱动后有重启黑屏的经历&#xff0c;所以后来一直没敢装显卡驱动&#xff0c;前段时间需要用显卡驱动跑程序&#xff0c;又装了一次&#xff0c;果不其然黑屏了。 nvidia-smi 是可以显示出显卡信息的&#xff0c;这说明显卡驱动是装上了。 1.首先是试了18 20 22的…

ubuntu虚拟机启动失败黑屏解决方案及原因

背景介绍 某天某个时辰,手残的我想打开VMWare里面的ubuntu虚拟机跑跑Kubernetes突然发现ubuntu虚拟机黑屏无法启动,只有一个光标在闪烁,图形界面就再也打不开了 原因 进入高级模式后发现磁盘占用满了,清除一些文件后ubuntu虚拟机正常启动 解决方案 进入grub模式 一旦启动后…