主要内容

简称anfis

利用训练数据优化sugeno型模糊推理系统

描述

例子

金融中间人=简称anfis (trainingData生成一个单输出Sugeno模糊推理系统(FIS),并使用指定的输入/输出训练数据调整系统参数。FIS对象是使用网格分区自动生成的。

训练算法使用最小二乘和反向传播梯度下降方法的组合来建模训练数据集。

例子

金融中间人=简称anfis (trainingData选项使用指定的训练数据和选项调整FIS。使用此语法,您可以指定:

  • 要调优的初始FIS对象。

  • 防止训练数据过拟合的验证数据。

  • 训练算法选项。

  • 是否显示培训进度信息。

例子

金融中间人trainError= anfis(___返回每个训练时期的均方根训练误差。

例子

金融中间人trainErrorstepSize= anfis(___返回每个训练时期的训练步长。

例子

金融中间人trainErrorstepSizechkFISchkError= anfis(trainingData选项返回每个训练周期的验证数据错误,chkError,验证误差最小的调优FIS对象,chkFIS.要使用此语法,必须使用指定验证数据选项。ValidationData

例子

全部折叠

加载训练数据。该数据只有一个输入和一个输出。

负载fuzex1trnData.dat

生成并训练一个模糊推理系统。默认情况下,FIS结构是使用输入变量范围的网格分区创建的,具有两个隶属度函数。

fis = anfis(fuzex1trnData);
ANFIS信息:节点数量:12线性参数数量:4非线性参数数量:6总参数数量:10训练数据对数量:25检查数据对数量:0模糊规则数量:2开始训练ANFIS…1 0.229709 2 0.22896 3 0.228265 4 0.227624在epoch 5之后步长增加到0.011000。5 0.227036 6 0.2265 7 0.225968 8 0.225488在epoch 9之后步长增加到0.012100。9 0.225052 10 0.22465已达到指定的新纪元号。ANFIS训练在第10纪元完成。最小训练RMSE = 0.22465

绘制ANFIS输出和训练数据。

x = fuzex1trnData(:,1);anfisOutput = evalfis(fis,x);情节(x, fuzex1trnData (:, 2),“* r”, x, anfisOutput“。b”)传说(的训练数据简称ANFIS输出的“位置”“西北”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示训练数据,ANFIS输出。

ANFIS数据与训练数据不匹配。改善匹配:

  • 将FIS结构中的成员函数数量增加到4.这样做为系统增加了模糊规则和可调参数。

  • 增加训练周期的数量。

opt = anfisOptions(“InitialFIS”4“EpochNumber”, 40);

抑制错误和步长命令窗口显示。

opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;

训练FIS。

fis = anfis(fuzex1trnData,opt);
ANFIS信息:节点数:20线性参数数:8非线性参数数:12总参数数:20训练数据对数:25检查数据对数:0模糊规则数:4最小训练RMSE = 0.0833853

绘制ANFIS输出和训练数据。

figure anfisOutput = evalfis(fis,x);情节(x, fuzex1trnData (:, 2),“* r”, x, anfisOutput“。b”)传说(的训练数据简称ANFIS输出的“位置”“西北”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示训练数据,ANFIS输出。

训练数据与ANFIS输出之间的匹配得到了改善。

创建单输入、单输出的训练数据。

X = (0:0.1:10)';Y = sin(2*x)./exp(x/5);

定义一个具有五个高斯输入隶属度函数的初始FIS结构。

genOpt = genfisOptions(“GridPartition”);genOpt。NumMembershipFunctions = 5; genOpt.InputMembershipFunctionType =“gaussmf”;inFIS = genfis(x,y,genOpt);

配置ANFIS培训选项。设置初始FIS,压制训练进度显示。

opt = anfisOptions(“InitialFIS”不定式);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

使用指定的选项训练FIS。

outFIS = anfis([x y],opt);

将ANFIS输出与训练数据进行比较。

情节(x, y, x, evalfis(人物,x))传说(的训练数据简称ANFIS输出的

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示训练数据,ANFIS输出。

加载训练数据。该数据只有一个输入和一个输出。

负载fuzex2trnData.dat

指定培训选项。

opt = anfisOptions(“InitialFIS”4“EpochNumber”, 40);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

训练FIS,并返回训练误差。

[fis,trainError] = anfis(fuzex2trnData,opt);

trainError包含每个训练时期的训练数据的均方根误差。的训练误差金融中间人最小值在吗trainError

fisRMSE = min(trainError)
fisRMSE = 0.2572

创建单输入、单输出的训练数据。

X = (0:0.1:10)';Y = sin(2*x)./exp(x/5);

配置ANFIS培训选项。设置初始FIS,压制训练进度显示。

opt = anfisOptions(“InitialFIS”4“EpochNumber”、60);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

步长增加速率越大,训练收敛速度越快。然而,步长增加速度过快会导致收敛性差。对于本例,尝试将步长增加速率加倍。

opt. stepsizeincreerate = 2*opt. stepsizeincreerate;

训练FIS,并返回步长数组。

[fis,~,stepSize] = anfis([x y],opt);

绘制步长轮廓。最佳步长曲线应该在初始阶段增加,达到最大值,然后在剩余的训练中减小。

图绘制(stepSize)

图中包含一个轴对象。axis对象包含一个line类型的对象。

加载训练数据。

负载fuzex1trnData.dat

加载验证数据。

负载fuzex1chkData.dat

指定以下培训选项:

  • 4输入隶属度函数

  • 30.培训的时代

  • 抑制训练进度显示

opt = anfisOptions(“InitialFIS”4“EpochNumber”, 30);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

将验证数据添加到培训选项中。

opt.ValidationData = fuzex1chkData;

训练FIS,并返回验证结果。

[fis,trainError,stepSize,chkFIS,chkError] = anfis(fuzex1trnData,opt);

训练误差,trainError,验证错误,chkError,每个数组每个训练纪元包含一个错误值。画出训练误差和验证误差。

X = [1:30];情节(x, trainError,“。b”, x, chkError“* r”

图中包含一个轴对象。axis对象包含2个line类型的对象。

最小的验证错误发生在epoch 17。在此点之后验证误差的增加表明模型参数对训练数据的过拟合。因此,第17历元调整后的FIS,chkFIS,具有最好的泛化性能。

输入参数

全部折叠

训练数据,指定为数组。对于一个模糊系统N输入,指定trainingData作为一个数组N+ 1列。第一个N列包含输入数据,最后一列包含输出数据。每行trainingData包含一个数据点。

一般来说,训练数据应该完全代表FIS拟建模数据的特征。

培训选项,指定为anfisOptions选项设置。使用选项,你可以指定:

  • 要调优的初始FIS结构,选项。InitialFIS

  • 防止对训练数据过拟合的验证数据,选项。ValidationData

  • 训练算法选项,比如最大训练周期数,选项。EpochNumber,或训练误差目标,选项。ErrorGoal

  • 是否显示训练进度信息,例如每个训练周期的训练误差值,选项。DisplayErrorValues

输出参数

全部折叠

训练模糊推理系统的隶属度函数参数调整使用训练数据,返回作为一个mamfissugfis对象。该模糊系统对应于训练误差最小的历元。如果两个epoch具有相同的最小训练误差,则返回前一个epoch的FIS。

每个训练周期的均方根训练误差,以数组形式返回。中的最小值trainError模糊系统的训练有误差吗金融中间人

每个纪元的训练步长,作为数组返回。的简称anfis训练算法采用梯度下降优化方法调整FIS参数。训练步长是参数空间中梯度转换的大小。

理想情况下,步长在训练开始时增加,达到最大值,然后在剩余的训练中减小。要实现此步长配置文件,请调整初始步长(选项。InitialStepSize),步长增加率(选项。StepSizeIncreaseRate),步长减小率选项。StepSizeDecreaseRate

验证错误最小的调优FIS,返回为mamfissugfis对象。如果两个epoch具有相同的最小验证错误,则返回前一个epoch的FIS。

chkFIS仅在使用?指定验证数据时返回选项。ValidationData

训练误差的均方根,作为长度等于训练周期数的数组返回。中的最小值chkError模糊系统的训练有误差吗chkFIS

chkError仅在使用?指定验证数据时返回选项。ValidationData

选择功能

tunefis函数

从R2019a开始,您可以使用tunefis.属性指定的其他几个算法调优选项tunefisOptions对象。

要使用ANFIS,请将调优算法指定为简称anfis”tunefisOptions.然后,使用options对象作为的输入参数tunefis.例如:

创建初始模糊推理系统,并定义可调参数设置。

X = (0:0.1:10)';Y = sin(2*x)./exp(x/5);选项= genfisOptions(“GridPartition”);选项。NumMembershipFunctions = 5; fisin = genfis(x,y,options); [in,out,rule] = getTunableSettings(fisin);

调优隶属度函数参数简称anfis”

opt = tunefisOptions(“方法”简称anfis”);Fisout = tunefis(fisin,[in;out],x,y,opt);

参考文献

[1]张j.s。R.,“基于广义神经网络和卡尔曼滤波算法的模糊建模”,第九届全国人工智能大会论文集(AAAI-91).1991年7月,第762-767页。

[2]张j.s。R.,“ANFIS:基于自适应网络的模糊推理系统,”IEEE系统、人与控制论汇刊, 1993年5月,第23卷第3期,第665-685页。

版本历史

R2006a之前介绍

全部展开

R2019b开始发出警告