ANFIS

利用训练数据调关野型模糊推理系统

描述

FIS= ANFIS(trainingData生成单输出Sugeno模糊推理系统(FIS),并使用指定的输入/输出的训练数据调谐系统参数。该FIS对象是使用格子分割自动生成。

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

FIS= ANFIS(trainingData选项调谐使用指定的训练数据和选项的FIS。使用这个语法,你可以指定:

  • 初始FIS对象来调谐。

  • 验证数据,以防止过度拟合训练数据。

  • 训练算法的选择。

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

[FIStrainError] = ANFIS(___返回每个训练时期的均方根训练误差。

[FIStrainError一步的大小] = ANFIS(___返回在每个训练时期训练步骤大小。

[FIStrainError一步的大小chkFISchkError] = ANFIS(trainingData选项返回验证数据误差对每个训练时期,chkError和调谐FIS对象的量,验证错误最小,chkFIS。要使用此语法,您必须使用指定的验证数据options.ValidationData

例子

全部收缩

负荷训练数据。该数据具有一个单一的输入和单一的输出。

加载fuzex1trnData.dat

生成和培养了模糊推理系统。缺省情况下,使用输入变量范围的网格划分具有两个隶属函数创建的FIS结构。

FIS = ANFIS(fuzex1trnData);
ANFIS信息:节点数量:4号的非线性参数:6的参数总数:0号的模糊规则:2启动训练ANFIS校验数据对25号:训练数据对10号线性参数的数量12。。。1 0.229709 2 0.22896 3 0.228265 4 0.227624 5 0.227036 Step size increases to 0.011000 after epoch 5. 6 0.2265 7 0.225968 8 0.225488 9 0.225052 Step size increases to 0.012100 after epoch 9. 10 0.22465 Designated epoch number reached --> ANFIS training completed at epoch 10. Minimal training RMSE = 0.224650

画出ANFIS输出和训练数据。

X = fuzex1trnData(:,1);anfisOutput = evalfis(FIS,X);积(X,fuzex1trnData(:,2),'* R'中,x,anfisOutput,'.B')图例(“训练数据”“ANFIS输出”'位置''西北'

该ANFIS数据不匹配训练数据良好。为了提高比赛:

  • 增加FIS结构的隶属函数数量4。这样做增加了模糊规则及可调参数的系统。

  • 加大培训时期的数量。

选择= anfisOptions('InitialFIS'4,'EpochNumber',40);

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

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

训练FIS。

FIS = ANFIS(fuzex1trnData,优化);
ANFIS信息:节点的数量:线性参数的20号:8号的非线性参数:参数12总数:训练数据对20号:检查数据对25号:模糊规则0号:4的最小训练RMSE =0.083385

画出ANFIS输出和训练数据。

图anfisOutput = evalfis(FIS,X);积(X,fuzex1trnData(:,2),'* R'中,x,anfisOutput,'.B')图例(“训练数据”“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,并且抑制训练进度显示。

选择= anfisOptions('InitialFIS',inFIS);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

培养使用指定的选项的FIS。

outFIS = ANFIS([X Y],优化);

比较与训练数据的ANFIS输出。

积(X,Y,X,evalfis(outFIS,X))图例(“训练数据”“ANFIS输出”

负荷训练数据。该数据具有一个单一的输入和单一的输出。

加载fuzex2trnData.dat

指定培训选项。

选择= anfisOptions('InitialFIS'4,'EpochNumber',40);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

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

[FIS,trainError] = ANFIS(fuzex2trnData,优化);

trainError包含均方根误差在每一个训练时期的训练数据。对于训练误差FIS是在最小值trainError

fisRMSE =分钟(trainError)
fisRMSE = 0.2572

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

X =(0:0.1:10)';Y = SIN(2 * X)./ EXP(X / 5);

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

选择= anfisOptions('InitialFIS'4,'EpochNumber',60);opt.DisplayANFISInformation = 0;opt.DisplayErrorValues = 0;opt.DisplayStepSize = 0;opt.DisplayFinalResults = 0;

较大的步长增长速度可以使训练收敛速度更快。但是,增加的步长增长率过多会导致收敛差。在这个例子中,尝试加倍步长的速度递增。

opt.StepSizeIncreaseRate = 2 * opt.StepSizeIncreaseRate;

训练FIS,并返回步长阵列。

[FIS,〜,stepSize的] = ANFIS([X Y],优化);

画出步长轮廓。最优步长型材应首先增加,达到最大值,然后降低了训练的其余部分。

图图(stepSize的)

负荷训练数据。

加载fuzex1trnData.dat

负载验证数据。

加载fuzex1chkData.dat

指定下列培训方案:

  • 4输入隶属函数

  • 三十训练时期

  • 禁止训练进度显示

选择= 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,优化);

训练误差,trainError和验证错误,chkError中,每个阵列包含每训练时期一个误差值。绘制训练误差和验证错误。

X = [1:30];图(X,trainError,'.B'中,x,chkError,'* R'

在历元17后这个点指示的模型参数来训练数据的过度拟合发生最小验证错误在验证错误的增加。因此,在历元17调谐FIS,chkFIS,表现出最好的泛化性能。

输入参数

全部收缩

训练数据,指定为一个数组。对于一个模糊系统ñ输入指定trainingData作为以与阵列ñ+1列。首先ñ列包含输入数据,并且最后一列包含输出数据。每行trainingData包含一个数据点。

一般来说,训练数据应充分代表FIS旨在模型数据的功能。

培训选项,指定为anfisOptions选项集。运用选项,您可以指定:

  • 初始FIS结构调整,options.InitialFIS

  • 为了防止过度拟合训练数据的验证数据,options.ValidationData

  • 训练算法选择,如训练时期的最大数量,options.EpochNumber或训练误差目标,options.ErrorGoal

  • 是否显示训练进度的信息,诸如用于每个训练时期的训练误差值,options.DisplayErrorValues

输出参数

全部收缩

训练有素的模糊推理系统隶属函数参数使用训练数据调整,返回为mamfis要么sugfis目的。这种模糊系统对应于该训练误差最小的时期。如果两个时代具有相同的最低训练错误,则返回从较早时期的FIS。

对于每个训练时期,作为一个数组返回均方根训练误差。在最小值trainError是模糊系统的训练误差FIS

对于每个历元训练步骤大小,作为一个数组返回。该ANFIS训练算法采用调谐梯度下降优化方法的FIS参数。训练步骤大小是在参数空间中的梯度转换的大小。

理想的是,在训练开始时的步长增加,达到最大值,然后对其余培训减小。为了实现这一步大小分布,调整所述初始步长大小(options.InitialStepSize),步长大小增加速率(options.StepSizeIncreaseRate),和步长减少率options.StepSizeDecreaseRate

调谐FIS为其验证误差最小,返回为mamfis要么sugfis目的。如果两个时代具有相同的最小验证错误,则返回从较早时期的FIS。

chkFIS只有当您使用指定的验证数据返回options.ValidationData

均方根训练误差,返回与长度的数组等于训练历元的数目。在最小值chkError是模糊系统的训练误差chkFIS

chkError只有当您使用指定的验证数据返回options.ValidationData

另类功能

tunefis功能

开始在R2019a,你可以调整使用模糊系统tunefis。这个功能提供用于调谐算法其他几种选择,由指定的tunefisOptions目的。

要使用ANFIS,指定调整算法“ANFIS”tunefisOptions。然后,使用选择对象作为输入参数tunefis。例如:

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

X =(0:0.1:10)';Y = SIN(2 * X)./ EXP(X / 5);选项= genfisOptions('GridPartition');options.NumMembershipFunctions = 5;fisin = genfis(X,Y,选项);[IN,OUT规则] = getTunableSettings(fisin);

调与隶属函数参数“ANFIS”

选择= tunefisOptions(“方法”“ANFIS”);fisout = tunefis(fisin,[在;输出],X,Y,优化);

兼容性注意事项

展开全部

警告在R2019b开始

参考

[1]张,J.-S.R.,“模糊建模的广义神经网络和卡尔曼滤波算法,”PROC。第九届全国CONF。人工智能(AAAI-91)。1991年7月,第762-767。

[2]张,J.-S.R.,“ANFIS:基于自适应,模糊神经网络,”IEEE系统,人,与控制论卷。23,第3号,1993年5月,第665-685。

R2006a前推出