RBF神经网络

【初识】一个简单的RBF神经网络例子

作者 : 老饼 发表日期 : 2023-01-18 12:44:30 更新日期 : 2024-12-11 19:54:37
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



RBF径向基神经网络是一种广泛使用的神经网络,它可用于拟合输入输出的数值关系

本文展示一个简单的RBF神经网络例子,用于预测化学反应数据的转化率,以及matlab代码实现

通过本文,可以快速的了解RBF神经网络有什么用,以及如何简单的使用RBF神经网络来进行数值预测





   01. 一个简单的RBF神经网络例子    





本节展示用于RBF神经网络例子的数据,以及简介介绍RBF神经模型





     一个简单的RBF神经网络-例子问题      


在正式学习RBF神经网络之前,许多小伙伴想先了解一下RBF神经网络是个什么东西,干什么用
本文先展现一个RBF神经网络的例子,用于祭板,如果有不明白的地方,可先跳过,后面会有详细讲解

我们以matlab自带的acetylene.mat化学反应数据为例,展示一个RBF神经网络的例子
 数据共16个样本,如下:
  化学反应数据     
其中,
y为:正庚烷制乙炔的转化率 
 
x1,x2,x3为:反应器温度,H2与正庚烷的摩尔比,接触时间
下面我们使用matlab的newrb函数,构建一个RBF神经网络来预测y





       RBF神经网络-简单介绍       


RBF神经网络是一种用于数值预测的模型,即用于解决回归问题
RBF神经网络的结构如下:

 RBF神经网络的结构   
如图,RBF神经网络是一个三层的网络:输入层、隐层和输出层
它先将输入层的输入转换为隐层的RBF隐节点,再用隐节点来构建出y
 matlab提供了两种构建RBF神经网络的算法:
 1. 第一种是插值算法,使用newrbe来构建      
2. 第一种是OLS算法,使用newrb来构建   
       
使用插值法时,有多少个样本,就会有多少个RBF隐节点
OLS法则会从插值法的隐节点中,挑出尽量少的隐节点,来满足指定的误差
 正常情况下,插值法的误差会为0,而OLS法则是满足指定的误差
但一般建模时都会使用OLS法,即newrb函数,因为当指定误差为0时,效果与插值法一致








    02. RBF神经网络例子-代码实现    





本节展示如何使用RBF神经网络来解决化学反应数据的预测





    使用newrb来构建一个RBF神经网络    


下面我们使用matlab的newrb函数来构建一个RBF神经网络
 具体代码如下:
% 代码说明:一个简单的用newrb构建一个RBF神经网络,预测化学反应数据
% 来自《老饼讲解神经网络》www.bbbdata.com ,matlab版本:2018a

% 加载数据与模型构建
load acetylene.mat
x  = [x1,x2,x3]';                               % 输入数据,每行代表一个输入变量,每列代表一个样本
y = y';                                         % 输出数据,每行代表一个输出变量,每列代表一个样本
[net,tr] = newrb(x, y, 0.05, 0.5);              % 以X,Y建立RBF神经网络,目标误差mse为0.05,径向基宽度参数spread =0.5

% 打印模型结果
plot(tr.epoch,tr.perf,'-o')                     % 误差下降曲线
title('误差下降曲线')                           % 标题
xlabel('隐节点个数')                            % x轴说明
ylabel('mse误差')                               % y轴说明
py       = sim(net,x);                          % 用建好的RBF神经网络预测训练数据
err_rate = mean(abs(py-y)./abs(y))              % 计算预测误差MAE
figure
plot(1:length(y),y,'*',1:length(y),py,'-')      % 绘制结果,x轴代表样本
title('模型预测结果')                           % 标题
xlabel('样本序号')                              % x轴说明
ylabel('样本真实值和预测值')                    % y轴说明
legend('y的真实值','y的预测值')                 % 图例
运行结果如下:
 RBF神经网络的误差下降曲线
它代表RBF神经网络每增加一个隐节点时,模型的MSE误差,最终使用了15个隐节点
 RBF神经网络的预测结果 
上图是16个样本在训练数据中的真实值与模型的预测值,可以看到它们基本是一致的
这是因为我们在代码中设置了目标MSE为0.05,所以训练数据的误差会比较小
 这是RBF神经网络的特色,它在训练数据上的误差一定能够满足,所以一般比较关注预测数据的准确程度







     RBF神经网络的预测     


在建好RBF神经网络模型后,使用sim函数对需要预测的样本进行预测就可以了,
具体代码示例如下:
% 用训练好的RBF神经网络进行预测
test_x = [1;2;3]                                % 需要预测的x
test_y = sim(net,test_x)                        % 模型对x的预测值
代码中的是我们需要预测的x,则是之前训练好的RBF神经网络模型
然后使用sim函数就可以让 进行预测,得到预测值 
运行结果如下:
 
即当模型的输入为时,模型给出的预测值是15







好了,以上就是一个简单的RBF神经网络例子的使用与代码实现了~








 End 




联系老饼