GRNN神经网络(Matlab)
Posted 您好啊数模君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GRNN神经网络(Matlab)相关的知识,希望对你有一定的参考价值。
一、介绍
在数学建模领域,径向基函数网络(Radial basis function network,缩写 RBF network)是一种使用径向基函数作为激活函数的人工神经网络。径向基函数网络的输出是输入的径向基函数和神经元参数的线性组合,广义回归神经网是基于径向基函数网络一种改进。
广义回归神经网络是建立在数理统计基础上的径向基函数网络,其理论基础是非线性回归分析。GRNN具有很强的非线性映射能力和学习速度,比RBF具有更强的优势,网络最后普收敛于样本量集聚较多的优化回归,样本数据少时,预测效果很好,网络还可以处理不稳定数据。
二、GRNN结构
该神经网络由输入层、隐含层和输出层组成。输入层将变量传递给隐含层,但不进行计算,因此该层只起传输数据的作用。隐含层中的神经元个数等于训练集样本个数,该层的权值函数为欧式距离函数,用||dist||表示,其作用是计算出网络输入与输入层权重IW1,1之间的距离及阈值,阈值用b1表示。隐含层传递函数为径向基函数,采用高斯函数作为网络的传递函数。输出层为线性输出层,其权函数为规范化点积函数nprod,计算网络的向量为n2,其中的每个元素的值等于向量a1和权重矩阵LW2,1每行元素点积再除以向量a1的各元素之和。然后将结果n2传递给线性传递函数a2=purelin(n2),计算网络输出。
三、算法步骤
(1)确定隐含层神经元径向基函数中心
设训练集样本输入矩阵P和输出矩阵T
其中,pij表示第j个训练样本的第i个输入变量;tij表示第j个训练样本的第i个输出变量;n为输入变量的维度;k为输出变量的维度;m为训练集样本数。
隐含层的每个神经元对应一个训练样本,即m个隐含神经元对应的径向基函数中心
(2)确定隐含层神经元阈值
m个隐含神经元对应的阈值为:
spread为径向基函数的扩展速度。
(3)确定隐含层与输出层的权值
隐含层神经元的径向基函数中心及阈值确定后,隐含层神经元的输出可有下式计算:
其中为第i个训练样本向量,记作。
隐含层与输出层间的连接权值W取为训练输出矩阵,即
(4)输出层神经元输出计算
当隐含层与输出层神经元间的连接权确定后,即可计算出输出层神经元输出。
案例——对某花不同种类的识别
本文给出一些已经确定好的花的各个种类的各项特征数据,请对其余花种的类别进行识别。
由于数据较多,本文不列举,首先先在matlab导入数据矩阵,前三列是各项指标数据,最后一列是花的类别。
mat数据文件保存:
将数据读入matlab后键入
>>save+空格+名称 比如:
>>save data
即将当前Workspace工作区间中的所有矩阵文件保存在data.mat文件中
%% 清空环境变量
clear all
clc
%% 训练集/测试集产生
% 导入数据
load data
gezhibiaozhishu=data(:,1:3);
jieguo=data(:,4);
[a,b]=size(gezhibiaozhishu);%指标矩阵维度
% 随机产生训练集和测试集,这里是在标准数据中随机选取一部分用来训练,一部分用于检验
P_train = [];%初始化矩阵
T_train = [];%初始化矩阵
P_test = [];%初始化矩阵
T_test = [];%初始化矩阵
g = gezhibiaozhishu;
J = jieguo;
c=20;%用于训练的个数
d=a-c;%用于检验的个数
% 训练集——提取矩阵前c个样本
P_train = g(1:c,:)';
T_train = J(1:c,:)';
% 测试集——提取矩阵后d个样本
P_test = g(c+1:a,:)';
T_test = J(c+1:a,:)';
%% 模型建立
result_grnn = [];%初始化矩阵
time_grnn = [];%初始化矩阵
for i = 1:b
for j = i:b
%这里提取
p_train = P_train(i:j,:);
p_test = P_test(i:j,:);
%% GRNN创建及仿真测试
t = cputime;%函数cputime返回以秒为单位的、自当前Matlab程序段启动之后到调用该函数所占用的CPU时间
% 创建网络
net_grnn = newgrnn(p_train,T_train);
% 仿真测试
t_sim_grnn = sim(net_grnn,p_test);
% T_sim_grnn = round(t_sim_grnn);%round功能:四舍五入
t = cputime - t;
time_grnn = [time_grnn t];%记录每次运行的时间
% result_grnn = [result_grnn T_sim_grnn'];%记录每次运行的结果
result_grnn = [result_grnn t_sim_grnn'];%记录每次运行的结果
end
end
%% 性能评价
time = [];%记录grnn和pnn每个模型运行的时间
e=(b^2+b)/2;%e为建立模型的个数
%找出误差最小的模型
for i = 1:e
accuracy_1(:,i) = abs(result_grnn(:,i)-T_test');
end
A=sum(accuracy_1,1);
[~,w]=min(A);
result=result_grnn(:,w);
time = time_grnn;
%% 绘图
figure
plot(1:d,T_test,'bo',1:d,result,'r-*')
grid on
xlabel('测试集样本编号')
ylabel('测试集样本误差')
string = {'GRNN测试集预测结果'};
title(string)
legend('真实值','GRNN预测值')
figure
plot(1:d,accuracy_1(:,w)','r-*')
grid on
xlabel('模型编号')
ylabel('结果误差')
figure
plot(1:e,time(1,:),'r-*')
grid on
xlabel('模型编号')
ylabel('运行时间(s)')
title('GRNN e个模型的运行时间')
legend('GRNN')
以上是关于GRNN神经网络(Matlab)的主要内容,如果未能解决你的问题,请参考以下文章
GRNN回归预测基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测含Matlab源码 2132期
GRNN回归预测基于matlab有限增量进化广义回归神经网络LIEV-GRNN数据回归预测含Matlab源码 2132期
NSCT+GRNN网络基于NSCT变换和GRNN神经网络的无参考图像质量检测算法的MATLAB仿真