RBF是具有单隐层的三层前向网络。第一层为输入层,由信号源节点组成。第二层为隐藏层,隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数即径向基函数是对中心点径向对称且衰减的非负线性函数,该函数是局部响应函数,具体的局部响应体现在其可见层到隐藏层的变换跟其它的网络不同。
以前的前向网络变换函数都是全局响应的函数。第三层为输出层,是对输入模式做出的响应。输入层仅仅起到传输信号作用,输入层和隐含层之间之间可以看做连接权值为1的连接,输出层与隐含层所完成的任务是不同的,因而他们的学习策略也不同。输出层是对线性权进行调整,采用的是线性优化策略,因而学习速度较快;而隐含层是对激活函数(格林函数,高斯函数,一般取后者)的参数进行调整,采用的是非线性优化策略,因而学习速度较慢。对于这句话的理解,从下面的层与层之间的变换可以发现。
RBF神经网络的基本思想:用RBF作为隐单元的“基”构成隐藏层空间,隐藏层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分问题在高维空间内线性可分。详细一点就是用RBF的隐单元的“基”构成隐藏层空间,这样就可以将输入矢量直接(不通过权连接)映射到隐空间。
当RBF的中心点确定以后,这种映射关系也就确定 了。而隐含层空间到输出空间的映射是线性的(注意这个地方区分一下线性映射和非线性映射的关系),即网络输出是因单元输出的线性加权和,此处的权即为网络可调参数。
RBF神经网络的参数问题用rbf测试水质,一共9个指标,输入9个指标,输出1个指标,数据归一化了,当spread在50左右的时候,预测值和函数值还会有误差,但是当spread到90的时候,所有指标的预测值和实际值几乎重合,全都到99%以上的预测精度。求解怎么回事代码:
clear,clc
close all
[x]=xlsread(‘water’);
[y]=xlsread(‘water’,2);
%输入样本划分
trainx=x(:,1:90);
trainy=y(1:90);
% [xx]=xlsread(‘11-12’,2);
% [yyy]=xlsread(‘11-12’,3);
testx=x(:,91:119);
testy=y(91:119);
% testx=xx;
% testy=yyy;
[train_x,inputps]=mapminmax(trainx,0,1);
[train_y,outputps]=mapminmax(trainy,0,1);
%% 创建网络
er = 1e-8;
% 扩散因子
spread = 90;
% 神经元个数
N = 120;
net = newrb(train_x, train_y, er, spread, N,1);
%网络测试
test_x=mapminmax(‘apply’,testx,inputps);
yy=net(test_x);
RBFoutput=mapminmax(‘reverse’,yy,outputps);
%% 计算、显示相对误差
e = (testy - RBFoutput)。/testy;
fprintf(‘相对误差: \n ’);
fprintf(‘%f ’, e);
fprintf(‘\n\n’);
% 平均相对误差
m = mean( abs(e) );
fprintf(‘平均相对误差: \n %f\n’, m);
% 最大相对误差
ma = max(abs(e));
fprintf(‘最大相对误差: \n %f\n’, ma);
% 显示实际值与拟合值
figure(1)
plot(1:29, testy, ‘bo-’)
hold on
plot(1:29, RBFoutput, ‘r*-’)
TItle(‘水质-PH测试结果’)
legend(‘真实值’, ‘预测值’)
axis([1,29,6.5,8.5])
%显示残差
figure(2)
plot(1:29, abs(testy - RBFoutput), ‘-o’)
TItle(‘残差’)
axis([1,29,0,0.005])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)