快速上手-RBF神经网络-代码与实现例子
RBF(Radial Basis Function)神经网络全称径向基函数神经网络,它1988年由布鲁姆赫德(Broomhead)和洛维(Lowe)首次提出的一种以RBF函数作为隐层激活函数的人工神经网络模型,它能以任意精度逼近任意连续函数,在机器学习领域广泛应用于曲线拟合、回归任务。
01.RBF神经网络-模型解说
下面就是RBF神经网络的模型结构了:

RBF神经网络是典型的三层神经网络结构,从输入到输出依次为输入层、隐含层、输出层。它呈现“输入非线性映射→输出线性组合”的分层结构,其中输入层是我们的输入,而隐层是RBF节点,输出层就是我们的输出了。
整体来说,就是将输入转换为RBF节点,然后再将RBF隐节点转换为最终的输出,具体的数学表述如下:

其中的W、b这些参数,就是RBF神经网络需要训练的参数了。不同的模型参数、就能拟合不同的输入、输出关系,在使用时就需要用我们的数据来喂养它,使它能拟合我们的数据样本。
02. RBF神经网络-代码实现
下面我们可以通过一个例子来看看RBF神经网络的使用方法和效果。
% 本代码用于展示如何使用newrb构建一个RBF径向基神经网络
% 来自《老饼讲解-RBF神经网络》,matlab版本:2018a
%--------数据准备----------
x = [-2,-1,0,1,2;-6,-2,0,3,8]; % 输入数据
y = [3,2,3,1,2]; % 输出数据
%--------网络训练----------
[net,tr] = newrb(x, y, 0.01,0.5); % 以X,Y建立RBF神经网络,目标误差0.01,RBF宽度参数spread=0.5
py = sim(net,x); % 用建好的网络进行预测,这里的x是要用来进行预测的输入
% -------打印结果----------
disp('------训练过程-------') % 标题
train_record = [tr.epoch;tr.perf] % 训练过程
disp('------训练结果-------') % 标题
hn = size(net.lw{2,1},2); % 计算隐节点个数
mae = mean(abs(py-y)); % 计算MAE
disp(['隐节点个数:' ,num2str(hn)]) % 打印隐节点个数
disp(['MAE:' ,num2str(mae)]) % 打印隐节点个数
plot(1:length(y),y,'*',1:length(y),py,'o') % 绘制结果,x轴代表样本
legend('原始数据的y','网络预测的y') % 添加图例
运行结果如下:


上面就是用RBF神经网络来拟合我们数据样本点的一个例子了。
03.RBF神经网络-newrb语法解说
上面使用到newrb函数,这是matlab实现RBF神经网络的函数,下面我们来说说newrb的使用方法。
newrb的调用形式如下:
net = newrb(P,T,goal,spread,MN,DF) % 全部入参
net = newrb(P,T,goal,spread) % 常用入参
(二) newrb的入参说明
newrb共有六个入参:
P : R行Q列的输入矩阵,R个输入变量,Q个样本。
T : S行Q列的目标输出矩阵,S个输出变量,Q个样本。
goal : 均方误差目标(默认=0.0)。
spread : 径向基函数的扩展系数(默认=1.0)。
MN : 隐层神经元的最大个数(默认是Q)。
DF : 每添加DF个神经元,在command窗口打印一次当前结果
备注:需要注意的是,输入输出数据每列代表一个样本,每行代表一个变量。
更多可以参考《RBF神经网络-newrb-函数》
04.看RBF神经网络的特点
最后来看看RBF神经网络的特点:
- 逼近能力强:理论上可以任意精度逼近任意非线性连续函数,非常适合处理非线性问题。
- 学习速度快:输出层权重采用线性优化策略求解,不需要反向迭代调整多层参数,训练效率远高于传统BP神经网络。
- 存在局部特性:隐含层神经元仅对靠近中心点的输入产生有效响应,更适合局部特征提取。
- 缺点:若训练数据不足或参数设置不当,容易出现过拟合(训练集效果好、测试集泛化能力差)
- 点赞
- 收藏
- 关注作者
评论(0)