模糊神经网络应用实例
扫描二维码
随时随地手机看文章
anfisedit
2. anfis命令训练:
% anfis调用5种格式
fis=anfis(trainingData)
fis=anfis(trainingData,options)
[fis,trainError]=anfis(___)
[fis,trainError,stepSize] = anfis(___)
[fis,trainError,stepSize,chkFIS,chkError] = anfis(trainingData,options)
3. 基础案例
%% demo1 *** 自动生成默认初始FIS
load fuzex1trnData.dat %单输入输出数据集
fis = anfis(fuzex1trnData); % 自动生成输出FIS:默认grid partition方法,2个隶属度
x = fuzex1trnData(:,1);
anfisOutput = evalfis(fis,x); %使用训练好的结构进行推理
plot(x,fuzex1trnData(:,2),'*r',x,anfisOutput,'.b')
legend('Training Data','ANFIS Output','Location','NorthWest')
%% demo2 *** anfisOptions指定:模糊隶属函数个数为4;迭代次数为40
opt = anfisOptions('InitialFIS',4,'EpochNumber',40);
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
fis = anfis(fuzex1trnData,opt); %-----2 通过anfisOptions指定
anfisOutput = evalfis(fis,x);
figure
plot(x,fuzex1trnData(:,2),'*r',x,anfisOutput,'.b')
legend('Training Data','ANFIS Output','Location','NorthWest')
%% demo3 *** genfis创建初始FIS
x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);
%定义初始ANFIS结构
genOpt = genfisOptions('GridPartition'); % GridPartition
genOpt.NumMembershipFunctions = 5;%隶属函数个数为5
genOpt.InputMembershipFunctionType = 'gaussmf';%使用高斯隶属函数
inFIS = genfis(x,y,genOpt);
%配置选项
opt = anfisOptions('InitialFIS',inFIS);
opt.DisplayANFISInformation = 0;%是(1)否(0)显示ANFIS训练信息
opt.DisplayErrorValues = 0;%是(1)否(0)显示ANFIS目标训练误差
opt.DisplayStepSize = 0;%是(1)否(0)显示训练步长
opt.DisplayFinalResults = 0;%是(1)否(0)显示训练结果
opt.ValidationData = chkData;%chkData 验证数据集
%按照设置的选项训练ANFIS
outFIS = anfis([x y],opt);
%图形化显示
plot(x,y,x,evalfis(outFIS,x))
legend('Training Data','ANFIS Output')
%% demo4 *** 进行数据验证防止过度拟合
load fuzex1trnData.dat %导入训练数据
load fuzex1chkData.dat %导入验证数据
% 设定训练结构 4 membership functions;30 training epochs
opt = anfisOptions('InitialFIS',4,'EpochNumber',30);
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;
% 设置验证数据集 fuzex1chkData;
opt.ValidationData = fuzex1chkData;
[fis,trainError,stepSize,chkFIS,chkError] = anfis(fuzex1trnData,opt);
%每个训练迭代步记录的 训练误差trainError, 验证误差 绘图
x = [1:30]; % 迭代次序
plot(x,trainError,'.b',x,chkError,'*r')
在迭代次数为17时,验证误差(红)最小,chkFIS为17时的参数,17后为过度拟合,