老饼讲解:一步一步上手学习
前面我们已经摸清楚RBF神经网络是什么了,这节我们先拉点数据出来,简单地玩一玩RBF神经网络,来看看RBF神经网络的效果,同时印证一下之前学习到的内容。
这里我们简单的以sin函数的拟合作为例子,看看RBF神经网络解决曲线拟合问题的效果。
我们先从sin函数中采集15个样本,如下:

好了,下面我们用RBF神经网络来拟合以上的样本点,然后看看它的拟合效果怎么样。
要构建一个RBF神经网络,可以借助matlab的神经网络工具箱的newrbe或newrb函数,在这里作为入门,我们先使用newrbe函数,以后再慢慢讲newrb函数。
好了,根据以上的样本点数据,我们用newrbe函数构建一个RBF神经网络,具体代码如下:
% 代码说明:用newrb构建一个RBF神经网络,来拟合sin函数
% 来自《老饼讲解-RBF神经网络》www.bbblearn.com ,matlab版本:2018a
close all
% 加载数据与模型构建
x = linspace(-pi,pi,15); % 自变量x采样
y = sin(x); % 函数值y
net = newrbe(x, y, 0.5); % 以X,Y建立RBF神经网络,径向基宽度参数spread=0.5
py = sim(net,x); % 用建好的RBF神经网络预测训练数据
% 打印模型结果
err_rate = mean(abs(py-y)) % 计算预测误差MAE
figure % 初始化画布
plot(x,y,'*') % 画出样本点
hold on % 先hold on 一下
t= -pi:0.1:pi; % 生成拟合曲线的x
simt = sim(net,t); % 拟合的y
plot(t,simt,'r') % 画出拟合曲线
title('模型拟合结果') % 标题
legend('训练样本点','拟合曲线') % 图例代码运行结果如下:

可以看到,拟合曲线经过了每一个训练样本点,同时,样本点与样本点之间也是平滑过度的,整体上已经很好地拟合出了sin函数的曲线形态。
在上述代码中,其实只有几句关键代码:

下面我们逐句解说一下:
首先是第5行,这是我们的输入数据,它在到之间生成15个数据,而第6行则是对应地得到y。
值得注意的是:matlab中约定,x和y每行代表一个变量、每列代表一个样本,所以这里的x和y都是的数据。
第7行是用x和y来构建一个RBF神经网络,并指定宽度参数为spread=0.5。这里spread设得越大,就代表所使用的RBF越宽,在这里我们先这样理解就可以了。然后返回的net就是构建好的RBF神经网络。
第8行就是演示如何用构建好的RBF神经网络来预测,其中net是我们上面训练好的RBF神经网络,x则是我们需要预测的输入数据,然后就得到模型的预测值py。
在这里的预测,我们直接用x来作为输入,事实上,我们需要预测什么,就输入什么,例如要预测x=0.8时的输出,那么就用:py = sim(net,0.8)就可以了。
好了,后面都是一些画图的代码,就不再展开解说了。
有的同学就会问了,我们构建好的模型最后是什么?事实上,我们知道RBF神经网络的表达式为:
所以,我们只需要提取出模型的隐层、输出层权重、阈值出来,再代入上面的模型就可以了,而代码中的sim函数,其实就是用以上的模型表达式来进行预测。由于模型提取这个比较常用,我们就放到后面再作为一张独立文章进行解说好了,这里暂时不展开。
这一节我们简单的使用了一个RBF神经网络来进行曲线拟合,事实上RBF神经网络就是这么简单,它根据输入数据来生成多个RBF,然后这些RBF之和就是RBF神经网络的输出了,同时,我们也初步了解了如何在matlab中实现一个RBF神经网络,只需要使用newrbe或newrb函数就可以了,然后调用sim函数就可以进行预测了。
评论