本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
RBF径向基神经网络是一种广泛使用的神经网络,它可用于拟合输入输出的数值关系
本文展示一个简单的RBF神经网络例子,用于预测化学反应数据的转化率,以及matlab代码实现
通过本文,可以快速的了解RBF神经网络有什么用,以及如何简单的使用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隐节点,再用隐节点来构建出y
matlab提供了两种构建RBF神经网络的算法:
1. 第一种是插值算法,使用newrbe来构建
2. 第一种是OLS算法,使用newrb来构建
使用插值法时,有多少个样本,就会有多少个RBF隐节点
OLS法则会从插值法的隐节点中,挑出尽量少的隐节点,来满足指定的误差
正常情况下,插值法的误差会为0,而OLS法则是满足指定的误差
但一般建模时都会使用OLS法,即newrb函数,因为当指定误差为0时,效果与插值法一致
本节展示如何使用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神经网络每增加一个隐节点时,模型的MSE误差,最终使用了15个隐节点
上图是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