傻瓜攻略(六)——MATLAB实现RBF神经网络

径向基函数(Radial Basis Function,RBF)神经网络是一种传统的神经网络,于1988年首次被提出。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。

RBF神经网络有很强的逼近能力、分类能力和学习速度。其工作原理是把网络看成对未知函数的逼近,任何函数都可以表示成一组基函数的加权和,也即选择各隐层神经元的传输函数,使之构成一组基函数来逼近未知函数。RBF人工神经网络由一个输入层、一个隐含层和一个输出层组成。

RBF神经网络结构简单、训练简洁且收敛速度快,能够逼近任意非线性函数,因此被广泛应用于时间序列分析、模式识别、非线性控制和图形处理等领域。

1.RBF神经网络结构模型

以下内容主要参考了《MATLAB神经网络43个案例分析》第7章。
RBF神经网络的神经元模型如图所示。径向基神经网络的节点激活函数采用径向基函数,通常定义为空间任一点到某一中心之间的欧式距离的单调函数。
在这里插入图片描述
图中所示的径向基神经元结构可以看出,径向基神经网络的激活函数是以输入向量x和权值向量w之间的距离Il dist ll作为自变量的。径向基神经网络的激活函数R的一般表达式为
在这里插入图片描述
随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出为1。图中的b为阈值,用于调整神经元的灵敏度。利用径向基神经元和线性神经元可以建立广义回归神经网络,此种神经网络适用于函数逼近方面的应用;径向基神经元和竞争神经元可以建立概率神经网络,此种神经网络适用于解决分类问题。

由输入层、隐藏层和输出层构成的一般径向基神经网络结构如下图所示。在RBF神经网络中,输入层仅仅起到传输信号的作用,与传统的神经网络相比,输入层和隐含层之间可以看作连接权值为1的连接,输出层和隐含层所完成的任务是不同的,因而它们的学习策略也不相同。输出层是对线性权进行调整,采用的是线性优化策略,因而学习速度较快。而隐含层是对激活函数(格林函数或高斯函数,一般取高斯函数)的参数进行调整,采用的是非线性优化策略,因而学习速度较慢。
在这里插入图片描述

2. 相关MATLAB函数

以下内容参考了mathworks官网文档Radial Basis Neural Networks对几个函数的介绍,以及函数各自的介绍文档。

radbas函数为径向基传递函数,其调用格式为

A = radbas(N,FP)

其中
N为输入向量组成的S×Q维矩阵;
FP为函数参数的结构(忽略);
A为函数返回矩阵,与N一一对应,即N中的每个元素通过径向基函数得到A;

newrb()函数可以设计一个近似径向基网络,其调用格式为

[net,tr] = newrb(P,T,goal,spread,MN,DF)

其中
P为Q组输入向量组成的R×Q维矩阵;
T为Q组目标分类向量组成的S×Q维矩阵;
goal为均方误差目标(Mean Squared Error Goal),默认为0;
spread为径向基函数的扩展速度,默认为1;
MN为神经元的最大数目,默认为Q;
DF为两次显示之间所添加的神经元数目,默认为25;
net为返回值,即一个RBF网络;
tr为返回值,训练记录。

用newrb()创建RBF网络是一个不断尝试的过程,在创建过程中,需要不断增加中间层神经元的个数,直到网络的输出误差满足预先设定的值或者达到最大神经元数量为止。该函数设计的径向基网络net可用于函数逼近。径向基函数的扩展速度spread越大,函数的拟合就越平滑。但是,过大的spread意味着需要非常多的神经元以适应函数的快速变化。如果spread设定过小,则意味着需要许多神经元来适应函数的缓慢变化,这样一来,设计的网络性能就不会很好。对于特定问题,需要多次尝试寻找最好的网络结构。

newrbe函数用于设计一个精确径向基网络,其调用格式为

net = newrbe(P,T,spread)

其中,
P为Q组输入向量组成的R×Q维矩阵;
T为Q组目标分类向量组成的S×Q维矩阵;
spread为径向基函数的扩展速度,默认为1。
和newrb()不同,newrbe()能够基于设计向量快速、无误差地设计一个径向基网络。

3. 相关代码

3.1 实现非线性函数的拟合

Radial Basis Approximation是利用RBF进行函数拟合的示例,并进行了详细的介绍,但是对我没啥用,只把链接放在这里。Radial Basis Underlapping NeuronsRadial Basis Overlapping Neurons研究了扩散常数如何影响径向基网络的设计过程。

3.2 解决多分类问题

代码来源为Classification by Radial Basis Function Neural Networks,使用newrb函数建立的RBF神经网络对三分类问题进行训练和测试,具体过程见代码注释。

%% 网络的构建和训练
% 训练数据,输入为9*3的矩阵,9个输入,带有3个特征
data = [10 0 0;
        10 0 1;
        10 1 0;
        2 10 0;
        2 10 1;
        2 11 0;
        5 0 10;
        5 0 11;
        5 1 10];
% 从输出目标可以看到输入分为3类
target = [1;1;1;2;2;2;3;3;3];

% 利用数据构建RBF神经网络并训练
net = newrb(data',target');  % 注意矩阵的转置
save('net.mat','net');       % 将网络net保存为.mat文件,后面可直接调用

% 查看效果
y = sim(net,data');  % 网络对输入进行运算得到输出y
y=round(y);          % 将输出y的近似值作为分类结果
performance = sum(target==y')/size(target,1)  % 计算网络输出和实际输出的对应程度

%% 测试训练后的模型
load('net.mat');     % 导入之前保存的网络
testdata = [10 0 0]; % 给出一个新的数据
y = sim(net,testdata'); % 利用训练后的网络对新数据进行分类
y=round(y);             % 得到分类结果

运行结果,会给出网络的均方根误差MSE,以及准确率performance,这里的效果还是很好的。

NEWRB, neurons = 0, MSE = 0.666667

performance =

     1

笔者的其他博客,欢迎大家阅读学习,共同进步
傻瓜攻略(一)——MATLAB主成分分析代码及结果分析实例

MATLAB中plotconfusion函数的应用

傻瓜攻略(二)——MATLAB数据挖掘之Apriori算法实现

win10系统中通过conda命令安装tensorflow(cpu版本,不用pip)

  • 33
    点赞
  • 323
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 在实现BP神经网络RBF神经网络之前,需要先明确两种网络的原理和区别。 BP神经网络是一种前向反馈网络,通过多层神经元之间的连接和神经元间的加权和激励函数来实现对输入数据进行处理。其中,误差反传算法是BP网络中最常用的训练方法。 而RBF神经网络则是一种基于径向基函数的神经网络,其输入层和输出层之间通过隐藏层来实现对输入数据进行处理。与BP网络不同的是,RBF网络的训练是通过聚类算法来得到隐藏层节点的数值和中心点。 在Matlab实现BP神经网络,可以使用Matlab自带的神经网络工具箱。具体步骤包括: 1. 构建BP网络的结构:定义输入层、输出层和隐藏层的节点数和连接方式。 2. 训练BP网络:使用训练数据进行网络训练,使用误差反传算法不断调整节点之间的权重。 3. 应用BP网络:根据训练好的网络进行数据预测或分类。 而实现RBF神经网络,则需要手动编写代码。具体步骤包括: 1. 读取数据:读取需要训练和预测的数据,分为训练数据和测试数据两部分。 2. 预处理数据:对数据进行归一化或标准化操作,使得数据符合RBF网络的输入规范。 3. 确定RBF网络的结构:确定输入层、输出层和隐藏层节点的数量以及径向基函数的类型。 4. 利用聚类算法确定隐藏层结点的位置和权重。 5. 训练RBF神经网络:使用训练数据和确定好的隐藏层节点和权重,训练RBF神经网络。 6. 应用RBF网络。根据训练好的网络进行数据预测或分类。 总之,虽然BP神经网络RBF神经网络都是广泛应用于模式识别和数据处理方面的技术,但通过Matlab实现两种网络的方法和步骤存在一定的差异。对于初学者来说,建议先选用Matlab自带的神经网络工具箱进行BP神经网络实现,逐步掌握RBF网络的原理和编写方法。 ### 回答2: BP神经网络RBF神经网络都是目前比较常用的两种神经网络类型。MATLAB作为一种非常强大的数学计算软件,也非常适合用来实现这两种神经网络。下面将分别介绍如何用MATLAB实现BP神经网络RBF神经网络。 一、 BP神经网络实现 1. 数据准备: BP神经网络需要一组训练数据来进行训练,这组训练数据应该是有标签的。 2. 构建网络模型: 可以使用MATLAB中的nntool命令来构建BP神经网络模型,nntool命令提供了GUI界面,可以设置输入层、隐层、输出层的神经元个数,指定训练数据等。 3. 数据预处理: 在训练之前需要对输入数据进行预处理,可以使用MATLAB中的preprocess命令进行数据预处理,一般包括归一化、标准化等操作。 4. 训练网络: 使用MATLAB中的train命令来进行BP神经网络的训练,train有多种训练算法可供选择,比如梯度下降算法、共轭梯度算法、Levenberg-Marquardt算法等。训练过程中也可以对训练参数进行调整,如学习率、动量、最大训练轮数等。 5. 测试与评估: 训练完成后,需要使用一组独立的测试数据对模型进行测试,可以使用MATLAB中的sim命令进行测试,得到的测试结果与真实标签进行比较,可以使用mse、rmse等指标来评估网络的性能。 二、 RBF神经网络实现 1. 数据准备: 和BP神经网络类似,RBF神经网络也需要一组训练数据来进行训练,这组训练数据应该是有标签的。 2. 构建网络模型: 可以使用MATLAB中的newrb命令来构建RBF神经网络模型,newrb命令提供了自适应学习率和半径的初始化方式,可以在一定程度上提高网络的训练效果。 3. 数据预处理: 在训练之前需要对输入数据进行预处理,可以使用MATLAB中的preprocess命令进行数据预处理,一般包括归一化、标准化等操作。 4. 训练网络: 使用MATLAB中的train命令来进行RBF神经网络的训练,train可以使用不同的训练算法,比如基于梯度下降的算法,可以通过设置训练轮数、学习率等参数来进行训练。 5. 测试与评估: 和BP神经网络类似,训练完成后,需要使用一组独立的测试数据对模型进行测试,可以使用MATLAB中的sim命令进行测试,得到的测试结果与真实标签进行比较,可以使用mse、rmse等指标来评估网络的性能。 总之,MATLAB提供了丰富的工具和函数库,可以方便地实现BP神经网络RBF神经网络,通过调整训练参数和优化算法等方法可以不断提高网络的性能。 ### 回答3: 在MATLAB实现BP神经网络RBF神经网络,需要掌握MATLAB中与神经网络相关的一些函数和工具箱。下面将分别介绍BP神经网络RBF神经网络MATLAB中的实现方法。 1. BP神经网络实现方法 1.1 BP神经网络的建模 在MATLAB中,通过“newff”函数建立BP神经网络模型。这个函数的具体用法如下: net = newff(P,T,S,F,TF,BTF,BLF,PF,IPF,OPF,DDF) 其中,P为输入数据,T为目标数据,S为各层的神经元数量,F为激活函数类型,TF为训练函数类型,BTF为边界训练函数类型,BLF为性能函数类型,PF为权重初始化函数类型,IPF为输入处理函数类型,OPF为输出处理函数类型,DDF为分布式权重更新类型。 1.2 BP神经网络的训练和预测 BP神经网络的训练可以使用“train”函数实现,具体用法如下: [net,tr] = train(net,P,T,Pi,Ai) 其中,net为BP神经网络模型,P为输入数据,T为目标数据,Pi为初始输入权重矩阵,Ai为初始偏差矩阵,tr为训练记录结构体。 BP神经网络的预测可以使用“sim”函数实现,具体用法如下: Y = sim(net,P,Pi) 其中,Y为网络输出结果,P为输入数据,Pi为输入权重矩阵。 2. RBF神经网络实现方法 2.1 RBF神经网络的建模 在MATLAB中,通过“newrb”函数建立RBF神经网络模型。这个函数的具体用法如下: net = newrb(P,T,GOAL,SPREAD,MN,DF) 其中,P为输入数据,T为目标数据,GOAL为性能目标,SPREAD为RBF宽度,MN为最大神经元数量,DF为距离函数类型。 2.2 RBF神经网络的训练和预测 RBF神经网络的训练可以使用“train”函数实现,具体用法如下: [net,tr] = train(net,P,T,Pi,Ai) 其中,net为RBF神经网络模型,P为输入数据,T为目标数据,Pi为初始输入权重矩阵,Ai为初始偏差矩阵,tr为训练记录结构体。 RBF神经网络的预测可以使用“sim”函数实现,具体用法如下: Y = sim(net,P,Pi) 其中,Y为网络输出结果,P为输入数据,Pi为输入权重矩阵。 总之,在MATLAB实现BP神经网络RBF神经网络需要掌握相关的函数和工具箱,同时需要对神经网络模型的建模、训练和预测等方面有一定的理解和应用经验。掌握这些知识可以帮助我们更加高效地实现神经网络模型,并且为实际的应用提供科学的支撑。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值