RBF神经网络是一种可以用于拟合任意关系的神经网络模型,它起源于RBF插值,但现在一般都使用OLS算法来训练。下面我们学以致用,用一个具体的例子来看看RBF神经网络是如何应用于预测问题的。

一、RBF神经网络例子-数据介绍

matlab自带的acetylene.mat化学反应数据,数据如下:
在这里插入图片描述
如数据所示,共有三个特征变量x1,x2,x3,以及一个输出y。
下面我们使用RBF神经网络来拟合X和y的关系。

二、RBF神经网络例子-代码实现

在matlab中只需要使用newrb函数就可以训练一个RBF神经网络了。
newrb函数的使用方法如下:
newrb函数的使用方法
下面我们就使用newrb函数来构建一个RBF神经网络,用来拟合以上X与y的关系。

% 加载数据与模型构建
load acetylene.mat
x  = [x1,x2,x3]';                               % 输入数据,每行代表一个输入变量,每列代表一个样本
y = y';                                         % 输出数据,每行代表一个输出变量,每列代表一个样本
net = newrb(x, y, 0.01, 0.5);                   % 以X,Y建立RBF神经网络,径向基宽度参数spread=0.5
py  = sim(net,x);                               % 用建好的RBF神经网络预测训练数据

% 打印模型结果                          
err_rate = mean(abs(py-y))                      % 计算预测误差MAE
figure                                          % 初始化画布
plot(1:length(y),y,'*',1:length(y),py,'-')      % 绘制结果,x轴代表样本
title('模型预测结果')                           % 标题
xlabel('样本序号')                              % x轴说明
ylabel('样本真实值和预测值')                    % y轴说明
legend('y的真实值','y的预测值')                 % 图例

可以看到模型的预测结果如下:
代码结果
进一步地,如果想查看模型中的权重和阈值,那么可以通过下面的代码来查看:

w1   = net.iw{1}                           % 提取隐层的权重(即径向基的中心)   
b1   = net.b{1}                            % 提取隐层的阈值                             
w2   = net.lw{2,1}                         % 提取输出层权重
b2   = net.b{2}                            % 提取输出层的阈值

这样就能得到模型中的参数了。

结束语

这就是RBF神经网络的一个简单例子了,如果对RBF神经网络比较陌生的,可以跟着《老饼讲解-RBF神经网络》来一步一步上手。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐