老饼讲解:一步一步上手学习
上节我们使用RBF神经网络展示了sin函数的拟合,这节我们继续拉一点真实的数据出来玩一玩RBF神经网络,看看RBF神经网络是如何解决实际中的预测问题的,以及它的预测效果。
我们以matlab自带的acetylene.mat化学反应数据为例,展示一个RBF神经网络的例子。
acetylene.mat数据共16个样本,如下:

其中,分别为:反应器温度、H2与正庚烷的摩尔比、接触时间,y为:正庚烷制乙炔的转化率。
下面我们构建一个RBF神经网络,通过来预测y。
在matlab中,可以使用newrbe来构建一个RBF神经网络,具体代码如下:
% 代码说明:一个简单的用newrbe构建一个RBF神经网络,预测化学反应数据
% 来自《老饼讲解-RBF神经网络》www.bbblearn.com ,matlab版本:2018a
% 加载数据与模型构建
load acetylene.mat
x = [x1,x2,x3]'; % 输入数据,每行代表一个输入变量,每列代表一个样本
y = 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(1:length(y),y,'*',1:length(y),py,'-') % 绘制结果,x轴代表样本
title('模型预测结果') % 标题
xlabel('样本序号') % x轴说明
ylabel('样本真实值和预测值') % y轴说明
legend('y的真实值','y的预测值') % 图例代码运行结果如下:


可以看到,训练样本的MAE(平均绝对误差)几乎为0,大家不必惊讶,newrbe使用的是插值法构建RBF神经网络,在理论上它是必定能完美拟合训练样本的,所以看到训练误差为0这是正常的,这其实是RBF神经网络的特点。
好了,如果我们要预测一个新样本,就可以用sim函数来预测了,如下:
test_y = sim(net,[1,0.01,0.0001]')
这样就得到了的预测结果:

许多同学刚上手,在这里再次提示一下,在matlab的RBF神经网络中,x每行代表一个变量,每列代表一个样本,所以预测时,需要把它转置一下[1,0.01,0.0001]',使它符合一列代表一个样本的格式。
好了,这里我们又展示了一个RBF神经网络的例子,事实上,对于RBF神经网络解决其它问题也是类似的,只要明确我们的 x是什么,y是什么,然后把它丢到RBF神经网络中,训练好模型的参数,然后就可以用它来预测了。
评论