本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
RBF神经网络是一种以RBF径向基为激活函数的三层神经网络,常用于拟合各种数值关系
本文基于matlab完整实现RBF神经网络的建模代码,包括数据的归一化、模型的训练等
通过本文,可以具体了解RBF神经网络建模的代码实现,以及在使用时方便参考、复制代码
本节展示一个RBF神经网络建模的完整代码
RBF神经网络建模-代码实现
下面以一个例子,展示RBF神经网络的建模过程
% 本代码是matlab工具箱训练RBF神经网络的完整实际使用代码,包括了归一化、训练、测试与提取模型参数等内容
% 本代码旨在学习与平时使用时方便copy使用,matlab亲测版本:matlab2018a
% 本代码来自《老饼讲解神经网络》 www.bbbdata.com
%
clc;clear all;close all;
setdemorandstream(88888); % 指定随机种子,这样每次训练出来的网络都一样
x1 = -3:0.3:2; % 生成x1
x2 = -2:0.2:1.2; % 生成x2
X = [x1;x2]; % 将x1,x2作为输入数据
y = sin(x1)+0.2*x2.*x2; % 输出数据
% -------对输入数据进行归一化---------
iMax = max(X,[],2); % 训练数据X的最大值
iMin = min(X,[],2); % 训练数据X的最小值
normX = 2*(X -repmat(iMin,1,size(X,2)))./repmat(iMax-iMin,1,size(X,2)) -1; % 对输入数据进行归一化
% ----将数据分割为训练数据与测试数据-----
train_rate = 0.8; % 训练数据占比
sample_num = size(normX,2); % 样本个数
train_num = fix(sample_num*train_rate); % 确定用于训练的样本个数
randIndex = randperm(sample_num); % 将数据序列打乱
trainIndex = sort(randIndex(1:train_num)); % 选出用于训练的数据序号
testIndex = sort(randIndex(train_num+1:end)); % 选出用于测试的数据序号
x_train = normX(:,trainIndex); % 根据序号选出用于训练的输入
x_test = normX(:,testIndex); % 根据序号选出用于测试的输入
y_train = y(:,trainIndex); % 根据序号选出用于训练的输出
y_test = y(:,testIndex); % 根据序号选出用于测试的输出
% -------参数设置与模型训练----------------
goal = mean((0.1*y_train).^2); % 设置goal
spread = 1; % 设置spread
net = newrb(x_train, y_train, goal,spread); % 用训练数据对模型进行训练
py_train = sim(net,x_train); % 训练数据的预测结果
py_test = sim(net,x_test); % 测试数据的预测结果
% ------提取网络的权重、阈值------------------
w2 = net.iw{1}; % 提取隐层的权重(即径向基的中心)
b2 = net.b{1}; % 提取隐层的阈值
w3 = net.lw{2,1}; % 提取输出层权重
b3 = net.b{2}; % 提取输出层的阈值
%-----------绘制预测结果拟合图------------------------
figure; % 新建画图窗口窗口
subplot(2,1,1) % 定位第一个绘图子窗口
t = 1:length(py_train); % 生成数据序列
plot(t,y_train,'*',t,py_train,'r') % 画图,对比训练数据的y和RBF网络预测的y
title('训练数据拟合效果') % 设置训练数据拟合结果的标题
legend('真实值','预测值') % 设置训练数据的图例
subplot(2,1,2) % 定位第二个绘图子窗口
t = 1:length(py_test); % 生成数据序列
plot(t,y_test,'*',t,py_test,'r') % 画图,对比测试数据的y和RBF网络预测的y
title('测试数据拟合效果') % 设置训练数据拟合结果的标题
legend('真实值','预测值') % 设置训练数据的图例
%-------------打印训练与测试的MAE------------------------
train_mae_rate = mean(abs(py_train(:)-y_train(:)))./mean(abs(y_train(:))); % 训练数据的相对mae误差
test_mae_rate = mean(abs(py_test(:)-y_test(:)))./mean(abs(py_test(:))); % 测试数据的相对mae误差
disp(['训练数据的相对MAE:',num2str(train_mae_rate)]) % 打印训练数据的相对mae误差
disp(['测试数据的相对MAE:',num2str(test_mae_rate)]) % 打印测试数据的相对mae误差
运行结果
代码运行结果如下:
训练结果的拟合效果
训练误差与测试误差
以上就是RBF神经网络的完整建模代码了,在效果不好时,再进行参数调优
End