RBF神经网络

【代码】RBF神经网络-完整建模代码

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



RBF神经网络是一种以RBF径向基为激活函数的三层神经网络,常用于拟合各种数值关系

本文基于matlab完整实现RBF神经网络的建模代码,包括数据的归一化、模型的训练等

通过本文,可以具体了解RBF神经网络建模的代码实现,以及在使用时方便参考、复制代码




    01.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神经网络的建模效果 
训练误差与测试误差
RBF神经网络的建模误差






以上就是RBF神经网络的完整建模代码了,在效果不好时,再进行参数调优








 End 






联系老饼