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

  • 一、广义回归神经网络原理
    • 1.1、GRNN与PNN的关系
    • 2.2、GRNN的网络结构
  • 二、广义回归神经网络的优点与不足
    • 2.1、优点
    • 2.2、不足
  • 三、GRNN的python实现
  • 参考资料

一、广义回归神经网络原理

1.1、GRNN与PNN的关系

广义回归神经网络(Generalized Regression Neural Network)的网络结构类似于RBF神经网络。与概率神经网络(PNN)相同,GRNN也是一个前向传播的网络,不需要反向传播求模型参数;不同的是GRNN用于求解回归问题,而PNN用于求解分类问题。关于GRNN的数学原理可以参考资料【1】。

2.2、GRNN的网络结构

如下图所示,GRNN与PNN一样也是一个四层的网络结构。

对于回归问题训练数据集包括样本特征集与标签集,假设样本特征集为:{trx1,trx2,⋯ ,trxm}\left\{ {tr{x_1},tr{x_2}, \cdots ,tr{x_m}} \right\}{trx1​,trx2​,⋯,trxm​},每一个样本的维度为nnn,即 trxi=[x1,x2,⋯ ,xn]tr{x_i} = [{x_1},{x_2}, \cdots ,{x_n}]trxi​=[x1​,x2​,⋯,xn​]。标签集为:{try1,try2,⋯ ,trym}\left\{ {tr{y_1},tr{y_2}, \cdots ,tr{y_m}} \right\}{try1​,try2​,⋯,trym​},每一个标签的维度为kkk,即 tryi=[y1,y2,⋯ ,yk]tr{y_i} = [{y_1},{y_2}, \cdots ,{y_k}]tryi​=[y1​,y2​,⋯,yk​]。

输入层:输入测试样本,节点个数等于样本的特征维度。

模式层:(与PNN的模式层相同)计算测试样本与训练样本中的每一个样本的Gauss函数的取值,节点个数等于训练样本的个数。
第iii个测试样本texite{x_i}texi​与第jjj个训练样本trxjtrx_jtrxj​之间的Gauss函数取值(对于测试样本xxx,从第jjj个模式层节点输出的数值)为:

Gauss(texi−trxj)=e−∥texi−trxj∥2δ2Gauss(te{x_i} - tr{x_j}) = {e^{ - \frac{{\left\| {te{x_i} - tr{x_j}} \right\|}}{{2{\delta ^2}}}}}Gauss(texi​−trxj​)=e−2δ2∥texi​−trxj​∥​

其中δ\deltaδ是模型的超参数(机器学习模型中,超参数是在开始学习过程之前设置值的参数),需要提前设定,也可以通过寻优算法(GA,QGA,PSO,QPSO等)获得。

求和层:节点个数等于输出样本维度加1(k+1k+1k+1),求和层的输出分为两部分,第一个节点输出为模式层输出的算术和,其余kkk个节点的输出为模式层输出的加权和。

假设对于测试样本textextex,模式层的输出为{g1,g2,⋯ ,gm}\left\{ {{g_1},{g_2}, \cdots ,{g_m}} \right\}{g1​,g2​,⋯,gm​}。
求和层第一个节点的输出为:

SD=∑i=1mgi{S_D} = \sum\limits_{i = 1}^m {{g_i}}SD​=i=1∑m​gi​

其余kkk个节点的输出为:

SNj=∑i=1myijgi,j=1,2,⋯ ,k{S_{Nj}} = \sum\limits_{i = 1}^m {{y_{ij}}{g_i},j = 1,2, \cdots ,k}SNj​=i=1∑m​yij​gi​,j=1,2,⋯,k

其中加权系数yijy_{ij}yij​为第jjj个模式层节点对应的训练样本的标签的第jjj个元素。
输出层:输出层节点个数等于标签向量的维度,每个节点的输出等于对应的求和层输出与求和层第一个节点输出相除。

二、广义回归神经网络的优点与不足

2.1、优点

收敛快:没有模型参数需要训练,收敛速度快。
非线性逼近:以径向基网络为基础,具有良好的非线性逼近性能。

2.2、不足

计算复杂度高:每个测试样本要与全部的训练样本进行计算。
空间复杂度高:因为没有模型参数,对于测试样本全部的训练样本都要参与计算,因此需要存储全部的训练样本。

三、GRNN的python实现

完整python代码与样本地址:https://github.com/shiluqiang/GRNN_python
本博文采用数据集为sine函数的数据集,将前190组数据作为训练集,后10组数据作为测试集。数据集中特征维度为1,标签维度也为1,因此GRNN的网络结构应该是(1:190:2:1)。
首先,计算模式层的输出。

def distance(X,Y):'''计算两个样本之间的距离'''return np.sqrt(np.sum(np.square(X-Y),axis = 1))def distance_mat(trainX,testX):'''计算待测试样本与所有训练样本的欧式距离input:trainX(mat):训练样本testX(mat):测试样本output:Euclidean_D(mat):测试样本与训练样本的距离矩阵'''m,n = np.shape(trainX)p = np.shape(testX)[0]Euclidean_D = np.mat(np.zeros((p,m)))for i in range(p):for j in range(m):Euclidean_D[i,j] = distance(testX[i,:],trainX[j,:])[0,0]return Euclidean_Ddef Gauss(Euclidean_D,sigma):'''测试样本与训练样本的距离矩阵对应的Gauss矩阵input:Euclidean_D(mat):测试样本与训练样本的距离矩阵sigma(float):Gauss函数的标准差output:Gauss(mat):Gauss矩阵'''m,n = np.shape(Euclidean_D)Gauss = np.mat(np.zeros((m,n)))for i in range(m):for j in range(n):Gauss[i,j] = math.exp(- Euclidean_D[i,j] / (2 * (sigma ** 2)))return Gauss

然后,计算求和层输出。

def sum_layer(Gauss,trY):'''求和层矩阵,列数等于输出向量维度+1,其中0列为每个测试样本Gauss数值之和'''m,l = np.shape(Gauss)n = np.shape(trY)[1]sum_mat = np.mat(np.zeros((m,n+1)))## 对所有模式层神经元输出进行算术求和for i in range(m):sum_mat[i,0] = np.sum(Gauss[i,:],axis = 1) ##sum_mat的第0列为每个测试样本Gauss数值之和## 对所有模式层神经元进行加权求和for i in range(m):             for j in range(n):total = 0.0for s in range(l):total += Gauss[i,s] * trY[s,j]sum_mat[i,j+1] = total           ##sum_mat的后面的列为每个测试样本Gauss加权之和            return sum_mat

最后,计算输出层的输出。

def output_layer(sum_mat):'''输出层输出input:sum_mat(mat):求和层输出矩阵output:output_mat(mat):输出层输出矩阵'''m,n = np.shape(sum_mat)output_mat = np.mat(np.zeros((m,n-1)))for i in range(n-1):output_mat[:,i] = sum_mat[:,i+1] / sum_mat[:,0]return output_mat

结果展示:

测试样本标签 回归结果
0.624676 0.557845
0.816921 0.881194
1.04449 0.916176
-0.30906 -0.293338
0.267336 0.126166
1.01882 0.815953
0.409871 0.296891
0.920009 0.912512
-0.112378 -0.0923096
0.768894 0.86055

参考资料

1、https://blog.csdn.net/guoyunlei/article/details/76101899?locationNum=4&fps=1

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

  1. 通俗理解广义回归神经网络(GRNN)

    通俗理解广义回归神经网络(GRNN) GRNN就是说,对于一个测试样本x,计算它与所有训练样本的相似度,计算相似度的方法使用高斯函数.假设 训练样本有10个:(x1, y1).(x2, y2).- . ...

  2. 【预测模型】基于麻雀算法改进广义回归神经网络(GRNN)实现数据预测matlab代码

    1 简介 为实现精准施肥"减施增效"的数字化农业施肥技术,本文基于并运用了麻雀搜索算法,对广义回归神经网络(GRNN)进行了结合与改进,并构建作物广义回归神经网络(GRNN)结合麻 ...

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

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

  4. 广义回归神经网络GRNN:Matlab实现多输入多输出广义回归神经网络GRNN (含例子及代码)

    创建5输入,2输出的GRNN,随机产生1000个5维数据x作为输入,输出值为y: %net = newgrnn(P,T,spread) %参数P为输入向量: %T为输出向量: %spread 为径向基 ...

  5. RBF神经网络、GRNN广义回归神经网络、PNN概率神经网络

    RBF神经网络介绍 RBF神经网络能够逼近任意的非线性函数 RBF可以处理系统内部难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式 ...

  6. 【预测模型-GRNN预测】基于有限增量进化广义回归神经网络LIEV-GRNN实现数据回归预测附matlab代码

    1 内容介绍 ​在本文中,基于有限增量进化和基于距离的剪枝对在线模型动态系统开发了一种进化一般回归神经网络.此外,建议使用基于方差的方法来调整 GRNN 中的平滑参数以适应在线应用.将所提出的模型与不 ...

  7. m基于GA遗传优化的GRNN广义回归神经网络销售数据预测算法matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着市场经济的发展和全球化,国内外企业面临着越来越残酷的市场竞争,要想赢得竞争,赢得市场,从事商品销 ...

  8. 【智能算法】GRNN的数据预测—基于广义回归神经网络的货运量预测

    目录 GRNN的数据预测-基于广义回归神经网络的货运量预测 GRNN的数据预测-基于广义回归神经网络的货运量预测 %% 清空环境变量 clc; clear all close all nntwarn ...

  9. 【姿态识别】基于HOG特征提取和GRNN广义回归神经网络的人体姿态识别matlab仿真

    1.软件版本 matlab2013b 2.本算法理论知识 GRNN广义回归神经网络的理论基础是非线性核回归分析,非独立变量y相对于独立变量x的回归分析实际上是计算具有最大概率值的y.设随机变量x和y的 ...

最新文章

  1. 2019年工信部重点实验室名单公布 涵盖卫星导航及人工智能等多个领域
  2. PLSQL Developer概念学习系列之如何正确登录连接上Oracle(图文详解)
  3. 取代C语言标准输入输出:cin 和 cout【C++标准输入输出】
  4. [BZOJ 2424][HAOI2010]订货(费用流)
  5. android浮于上方布局,android-在FrameLayout中使RecyclerView上方的视图...
  6. javafx树视图加选框_JavaFX缺少的功能调查:表视图
  7. php判断全是中文正则,php判断是否为中文正则表达式大全
  8. procyon java8_java jdk 8反编译工具JD-GUI、procyon-decompiler、luyten、crf下载使用简介
  9. sql 批量插入数据到Sqlserver中 效率较高的方法
  10. 2017-09-26 10:45:51.905 ERROR 9704 --- [nio-8080-exec-5] com.linktrust.aspect.AopLogger :
  11. 昆仑通态触摸屏保存历史曲线_昆仑通态历史曲线如何组态呢?
  12. 2021年一季度口腔护理行业网络关注度分析报告
  13. 3D相机技术 | 立体视觉传感器+TOF相机
  14. 期刊投稿状态_期刊投稿后的7种状态,如何应对
  15. 3.【Python编程】字典Dict相关知识及基本操作
  16. 傲游研发中心在京成立
  17. Java mysql获取行数_java – MySQL查询获取球体中的行(X,Y,Z坐标)?
  18. 在团队中如何带领新员工
  19. 新一代前端框架的探索与思考
  20. Android常用命令行——gradlew,adb,adb shell

热门文章

  1. .net 按行切割数组
  2. 把字符串复制到剪贴板
  3. 用三层交换机实现大中型企业VLAN
  4. Python学习笔记(六)—几个标准类型内建函数
  5. 回车(carriage return)和换行(line feed)的区别和来历
  6. 大数据分析工具有哪些特性
  7. 数据分析在企业中的应用
  8. c++折线平移算法_【MITA周刊】第十五周:聚类算法
  9. LinuxC语言のUDP简易聊天室 sokcet
  10. [USACO13OPEN]Luxury River Cruise【模拟】