ANFIS命令建立模糊神经网络输出范围的设定问题
由genfis1根据训练数据生成模糊推理系统隶属度函数曲线后在用anfis函数进行神经网络模糊建模
我的问题是,对于这样建立好的网络,我再输入新的数据后,输出就会产生问题
建立的网络,我规定的输入输出数据范围都是
可输入新的数据后,输出范围就变为[-1 0.8]了,可我想要的范围是,这是怎么回事呢?请高手指教~
btw:输入的数据我进行了规一化处理 最好给一下代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%实现特定复杂输入/输出关系的模糊推理系统
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%数据点数为numPts
numPts=time_length*6;
y=result1(t0);
data=;%整个数据集
trnData=data(1:2:numPts,:);%训练数据集合
chkData=data(2:2:numPts,:);%检验数据集合
%绘制训练数据和检验数据的分布曲线
figure(1);
plot(trnData(:,1:2),trnData(:,3),'o',...
chkData(:,1:2),chkData(:,3),'kx')
%建立用于模糊建模的Sugeno型模糊推理系统
%采用genfis1函数直接由训练数据生成模糊推理系统
numMFs1=5;%隶属度函数个数
numMFs2=5;
mfType1='gauss2mf';%隶属度函数类型
mfType2='gauss2mf';
fismat=genfis1(trnData,,char(mfType1,mfType2),'constant');
%绘制模糊推理系统的初始隶属度函数
figure(2);
=plotmf(fismat,'input',1);
subplot(2,1,1),plot(x,mf);
xlabel('input 1 (pimf)');
title('初始隶属度函数')
=plotmf(fismat,'input',2);
subplot(2,1,2),plot(x,mf);
xlabel('input 2 (pimf)'); 这是第一段程序,用来建立Sugeno型模糊推理系统,是一个两输入,一输出的模糊神经网络
其中sound_energy'和 shake_energy' 是输入量,已经经过归一化处理,y也是一个在范围内的参数
训练出的初始隶属度函数就是一个guass2mf函数(不知道为什么,我程序中调不出guass高斯函数,只好用这个函数代替) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%使用anfis函数进行给定数据的神经网络模糊建模
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numEpochs=40; %训练次数为40
=anfis(trnData,fismat,numEpochs,NaN,chkData);
%计算训练后神经网络模糊系统的输出与训练数据的均方根误差
%trnData2= reshape(trnData,45,2);
trnOut=evalfis(trnData(:,1:2),fismat1);
trnRMSE=norm(trnOut-trnData(:,3))/sqrt(length(trnOut));
%绘制训练过程中均方根误差的变化情况
epoch=1:numEpochs;
figure(3);
plot(epoch,trnErr,'o',epoch,chkErr,'kx')
%绘制训练过程中的最小二乘误差变化情况,如果训练数据和核对数据的误差同时减小,模型才是有效的
hold on;
plot(epoch,);
hold off
%绘制训练过程中步长的变化情况
figure(4)
plot(epoch,ss,'-',epoch,ss,'ko')
xlabel('epochs'),ylabel('ss'),title('Step Sizes')
%下面绘制训练后面模糊推理系统的隶属度函数曲线
figure(5)
=plotmf(fismat1,'input',1);
subplot(2,1,1),plot(x,mf);
xlabel('input 1 (pimf)');
title('训练后隶属度函数')
=plotmf(fismat1,'input',2);
subplot(2,1,2),plot(x,mf);
xlabel('input 2 (pimf)');
writefis(fismat1,'fuzzyrule'); 这是第二段程序,用anfis函数进行给定数据的神经网络模糊建模
训练后的隶属度函数就是原来的guass2mf函数的中心和宽度发生的变化,我认为是对模糊规则进行了修正,产生的新的隶属度函数,这样是不是就达到了训练网络的目的呢(?)
不过好像对输入1的隶属度变化比较明显,输入2的隶属度基本没有什么变化
我就当这就已经是训练好的模糊神经网络了
所以就对这个网络输入新的数据,新的数据也经过归一化处理,在之间,用output=evalfis(p,a)指令,其中a就是读取的训练好的网络,用showfis显示这个网络的话,可以看到输入、输出都是在大于0,小于1的范围内,也可以通过指令将范围规定在;
我认为输出应该在规定的范围内,可是输出是在[-1 0.8]这个范围的,我就不知道是怎么回事了?
是这个算法的输出本来就是关于0的对称输出呢,还是我的程序有什么问题?
我就是想要之间的输出,应该怎么改呢??
请高手指教,谢谢了!!!
求助:模糊神经网络
或者还有什么其他方法做模糊神经网络的请高手指教!
先谢谢了~
页:
[1]