模糊神經(jīng)網(wǎng)絡(luò)應(yīng)用實(shí)例
1. MATLAB模糊神經(jīng)網(wǎng)絡(luò)GUI 打開方式:
anfisedit
2. anfis命令訓(xùn)練:
% anfis調(diào)用5種格式
fis=anfis(trainingData)
fis=anfis(trainingData,options)
[fis,trainError]=anfis(___)
[fis,trainError,stepSize] = anfis(___)
[fis,trainError,stepSize,chkFIS,chkError] = anfis(trainingData,options)
3. 基礎(chǔ)案例
%% demo1 *** 自動(dòng)生成默認(rèn)初始FIS
load fuzex1trnData.dat %單輸入輸出數(shù)據(jù)集
fis = anfis(fuzex1trnData); % 自動(dòng)生成輸出FIS:默認(rèn)grid partition方法,2個(gè)隸屬度
x = fuzex1trnData(:,1);
anfisOutput = evalfis(fis,x); %使用訓(xùn)練好的結(jié)構(gòu)進(jìn)行推理
plot(x,fuzex1trnData(:,2),'*r',x,anfisOutput,'.b')
legend('Training Data','ANFIS Output','Location','NorthWest')
%% demo2 *** anfisOptions指定:模糊隸屬函數(shù)個(gè)數(shù)為4;迭代次數(shù)為40
opt = anfisOptions('InitialFIS',4,'EpochNumber',40);
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
fis = anfis(fuzex1trnData,opt); %-----2 通過(guò)anfisOptions指定
anfisOutput = evalfis(fis,x);
figure
plot(x,fuzex1trnData(:,2),'*r',x,anfisOutput,'.b')
legend('Training Data','ANFIS Output','Location','NorthWest')
%% demo3 *** genfis創(chuàng)建初始FIS
x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);
%定義初始ANFIS結(jié)構(gòu)
genOpt = genfisOptions('GridPartition'); % GridPartition
genOpt.NumMembershipFunctions = 5;%隸屬函數(shù)個(gè)數(shù)為5
genOpt.InputMembershipFunctionType = 'gaussmf';%使用高斯隸屬函數(shù)
inFIS = genfis(x,y,genOpt);
%配置選項(xiàng)
opt = anfisOptions('InitialFIS',inFIS);
opt.DisplayANFISInformation = 0;%是(1)否(0)顯示ANFIS訓(xùn)練信息
opt.DisplayErrorValues = 0;%是(1)否(0)顯示ANFIS目標(biāo)訓(xùn)練誤差
opt.DisplayStepSize = 0;%是(1)否(0)顯示訓(xùn)練步長(zhǎng)
opt.DisplayFinalResults = 0;%是(1)否(0)顯示訓(xùn)練結(jié)果
opt.ValidationData = chkData;%chkData 驗(yàn)證數(shù)據(jù)集
%按照設(shè)置的選項(xiàng)訓(xùn)練ANFIS
outFIS = anfis([x y],opt);
%圖形化顯示
plot(x,y,x,evalfis(outFIS,x))
legend('Training Data','ANFIS Output')
%% demo4 *** 進(jìn)行數(shù)據(jù)驗(yàn)證防止過(guò)度擬合
load fuzex1trnData.dat %導(dǎo)入訓(xùn)練數(shù)據(jù)
load fuzex1chkData.dat %導(dǎo)入驗(yàn)證數(shù)據(jù)
% 設(shè)定訓(xùn)練結(jié)構(gòu) 4 membership functions;30 training epochs
opt = anfisOptions('InitialFIS',4,'EpochNumber',30);
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;
% 設(shè)置驗(yàn)證數(shù)據(jù)集 fuzex1chkData;
opt.ValidationData = fuzex1chkData;
[fis,trainError,stepSize,chkFIS,chkError] = anfis(fuzex1trnData,opt);
%每個(gè)訓(xùn)練迭代步記錄的 訓(xùn)練誤差trainError, 驗(yàn)證誤差 繪圖
x = [1:30]; % 迭代次序
plot(x,trainError,'.b',x,chkError,'*r')
在迭代次數(shù)為17時(shí),驗(yàn)證誤差(紅)最小,chkFIS為17時(shí)的參數(shù),17后為過(guò)度擬合,