训练自适应神经模糊推理系统
这个例子展示了如何创建、训练和测试sugeno型模糊系统去噪的设计师更多信息:
神经自适应模糊系统,见神经适应学习和ANFIS.
在命令行训练神经自适应模糊系统,参见
简称anfis
.
将示例数据文件添加到MATLAB中®路径。
目录(fullfile (matlabroot,“例子”,“模糊”,“数据”));
负荷训练数据
培训和验证系统使用去噪的设计师App需要数据。导入训练数据(fuzex1trnData
)和验证数据(fuzex1chkData
)到MATLAB工作区。
负载fuzex1trnData.dat负载fuzex1chkData.dat
打开去噪的设计师应用程序。
neuroFuzzyDesigner
从工作区加载训练数据集。在加载数据部分中,选择培训而且worksp.
点击加载数据.在“从工作区加载”对话框中,输入变量名fuzex1trnData
.
点击好吧.去噪的设计师将图中的训练数据显示为一组圆圈。
将检查数据从MATLAB工作区加载到去噪的设计师.在加载数据部分中,选择检查.
以与训练数据相同的方式加载检查数据,并指定变量名fuzex1chkData
.去噪的设计师使用加号叠加在训练数据上显示检查数据。
要从应用程序中清除特定数据集,请使用加载数据区域,选择数据类型,并单击明确的数据.
生成或加载FIS结构
在开始FIS训练之前,必须指定初始的FIS模型结构。要指定模型结构,您可以执行以下任务之一:
从文件或MATLAB工作区加载先前保存的单输出sugeno类型FIS对象。
使用网格划分生成初始FIS模型。
使用减法聚类生成初始FIS模型。
对于本例,使用网格分区生成初始FIS。在去噪的设计师,在生成FIS部分中,选择网格分区.
点击生成FIS.
在“添加成员功能”对话框中:
在输入部分,在mf数量,指定输入隶属度函数的个数。对于本例,使用
4
所有输入变量的隶属函数。在MF型中,选择
gbellmf
作为输入隶属度函数类型。在输出部分,在MF型中,选择
线性
作为输出隶属函数类型。
交互式地指定FIS结构
或者,您可以使用指定的成员函数和规则交互式地指定自己的FIS结构。您定义的系统必须是具有以下属性的Sugeno系统:
单输出
加权平均去模糊
一阶或零阶系统;也就是说,所有输出成员函数也必须是相同的类型
“线性”
或“不变”
.没有规则共享。不同的规则不能使用相同的输出隶属度函数;也就是说,输出隶属函数的数量必须等于规则的数量。
每个规则的统一权重。
没有自定义成员函数或去模糊化方法。
定义:
每个变量的隶属函数,在去噪的设计师中,选择编辑>隶属度函数.然后,在“成员函数编辑器”窗口中定义成员函数。
规则,在去噪的设计师中,选择编辑>规则.然后,在“规则编辑器”窗口中定义规则。
这些工具与模糊逻辑设计器有关更多信息,请参见使用模糊逻辑设计器构建模糊系统.
查看FIS结构
加载或生成FIS之后,您可以查看模型结构。这样做,在去噪的设计师,点击结构.
图中的分支是用颜色编码的。分支的颜色编码描述了规则,并指出规则中是否使用and、not或or。输入由最左边的节点表示,输出由最右边的节点表示。节点表示规则的规范化因子。要查看结构的信息,请单击每个节点。
此外,要查看FIS:
成员函数,在去噪的设计师中,选择编辑>隶属度函数.
规则,在去噪的设计师中,选择编辑>规则.
火车FIS
加载训练数据并生成初始FIS结构之后,就可以训练FIS了。这样做,在去噪的设计师,在火车FIS节中,指定以下参数。
Optim。方法-优化方法。对于本例,选择
混合动力
该方法使用反向传播和最小二乘回归相结合的方法来优化FIS参数。时代-训练周期数。对于本例,请指定
40
时代的发展。错误宽容-容错停止条件。对于本例,指定值为
0
,表示达到训练周期数后,训练将停止。
训练FIS,单击火车现在.
该应用程序训练FIS,并为每个训练时期绘制训练误差(作为星号)和检查误差(作为点)。
在训练中,检查误差减小到某一点,然后增加。这种增加发生在训练开始过度拟合训练数据的时候。应用程序选择与该过拟合点相关的FIS作为训练过的ANFIS模型。
验证训练好的FIS
训练完FIS后,使用函数验证模型测试或检查与训练数据不同的数据集。对于本例,使用之前加载的检查数据。
要根据检查数据测试FIS,请在测试FIS部分中,选择检查数据.然后,单击测试现在.
应用程序绘制测试数据集的输出值(使用蓝色+'s)和训练FIS的输出对应的测试数据输入值(使用红色*'s)。FIS输出值与预期输出有很好的相关性。
检查数据的重要性
重要的是要有充分代表FIS打算建模的数据特征的检查数据。如果你的检查数据与你的训练数据有很大的不同,并且没有覆盖与训练数据相同的数据特征来建模,那么训练结果就会很差。
例如,将新的训练和检查数据加载到去噪的设计师.该数据具有显著不同的训练集和检查集。
在MATLAB命令行中,加载训练和检查数据。
负载fuzex2trnData.dat负载fuzex2chkData.dat
清除之前加载的训练和检查数据。在加载数据节中,选择每个数据类型,单击明确的数据.
加载训练数据(
fuzex2trnData
)及核对资料(fuzex2chkData
),就像你先前所做的一样。
生成一个FIS结构,并像前面那样训练FIS,除了现在选择60
培训时代。
在这种情况下,检查误差很大,最小的出现在第一个纪元。由于应用程序选择与最小检查误差相关的训练过的FIS参数,训练过的FIS不能充分捕获该数据集的特征。在选择训练和检查数据时,很好地了解数据集的特征是很重要的。当您不知道数据的特征时,您可以分析检查错误图,以查看检查数据是否与训练过的模型执行得足够好。
在这个例子中,检查误差足够大,表明您需要选择更多的数据进行训练,或者修改您的隶属函数选择(包括隶属函数的数量和类型)。否则,如果你认为训练数据足够捕捉你试图表示的特征,系统可以在没有检查数据的情况下重新训练。
为了验证较差的训练结果,将训练后的FIS模型与检查数据进行测试。
正如预期的那样,检查数据输出值和FIS输出之间存在显著差异。
从MATLAB路径中删除示例数据文件。
rmpath (fullfile (matlabroot,“例子”,“模糊”,“数据”))