这个例子展示了如何使用ANFIS进行混沌时间序列预测。
这个示例使用简称anfis
来预测由以下mackkey - glass (MG)时滞微分方程生成的时间序列。
这个时间序列是混沌的,没有明确的周期定义。级数不收敛或发散,轨迹对初始条件高度敏感。这个基准问题被用于神经网络和模糊建模研究领域。
为了得到整数点上的时间序列值,采用四阶龙格-库塔法对之前的MG方程进行数值求解。人们认为<年代pan class="inlineequation">
,<年代pan class="inlineequation">
,<年代pan class="inlineequation">
为<年代pan class="inlineequation">
.结果保存在文件中mgdata.dat
.
加载并绘制MG时间序列。
负载<年代pan style="color:#A020F0">mgdata.dat时间= mgdata (: 1);X = mgdata(:, 2);图(1)图(时间,x)标题(<年代pan style="color:#A020F0">“麦基-格拉斯混沌时间系列”)包含(<年代pan style="color:#A020F0">的时间(秒)) ylabel (<年代pan style="color:#A020F0">“x (t)”)
在时间序列预测中,你使用时间序列在某一时刻的已知值,<年代pan class="inlineequation">
,来预测未来某一时刻的价值,<年代pan class="inlineequation">
.这种类型的预测的标准方法是创建一个映射<年代pan class="inlineequation">
采样数据点,采样每一个<年代pan class="inlineequation">
时间单位(<年代pan class="inlineequation">
)到一个预测的未来价值<年代pan class="inlineequation">
.按照预测MG时间序列的常规设置,设置<年代pan class="inlineequation">
和<年代pan class="inlineequation">
.为每一个<年代pan class="inlineequation">
,输入训练数据简称anfis
是如下形式的四列向量。
输出的训练数据与轨迹预测相对应。
为每一个<年代pan class="inlineequation">
,值从118到1117,有1000个输入/输出训练样本。对于本例,使用前500个样本作为训练数据(trnData
)和第二个500值作为验证的检查数据(chkData
).训练和检查数据数组的每一行都包含一个样本点,其中前四列包含四维输入<年代pan class="inlineequation">
第五列包含输出<年代pan class="inlineequation">
.
构造训练和检查数据数组。
为t = 118:1117数据(t - 117:) =((根据18)x (t-12) x (t-6) x (t) x (t + 6)];<年代pan style="color:#0000FF">结束trnData =数据(1:50 0:);chkData =数据(501年:,);
创建用于培训的初始Sugeno FIS对象genfis
功能与网格分区。
fis = genfis (trnData (: 1: end-1), trnData(:,结束),<年代pan style="color:#0000FF">...genfisOptions (<年代pan style="color:#A020F0">“GridPartition”));
FIS输入输出的个数对应输入输出训练数据的列数,分别为4列和1列。
默认情况下,genfis
为四个输入中的每一个创建两个广义钟形隶属函数。每个变量的初始隶属函数是等间距的,并覆盖整个输入空间。
图次要情节(2 2 1)plotmf (fis,<年代pan style="color:#A020F0">“输入”1)次要情节(2,2,2)plotmf (fis,<年代pan style="color:#A020F0">“输入”, 2)次要情节(2,2,3)plotmf (fis,<年代pan style="color:#A020F0">“输入”3)次要情节(2,2,4)plotmf (fis,<年代pan style="color:#A020F0">“输入”4)
生成的FIS对象包含<年代pan class="inlineequation"> = 16条模糊规则,104个参数(24个非线性参数,80个线性参数)。为了获得良好的泛化能力,重要的是训练数据点的数量要比估计的参数数量大几倍。在本例中,数据与参数的比值约为5(500/104),这是拟合参数与训练样本点之间的良好平衡。
要配置培训选项,请创建anfisOptions
选项集,指定初始FIS和验证数据。
选择= anfisOptions (<年代pan style="color:#A020F0">“InitialFIS”金融中间人,<年代pan style="color:#A020F0">“ValidationData”, chkData);
使用指定的培训数据和选项对FIS进行培训。
[fis1, error1,党卫军,fis2, error2] =简称anfis (trnData、期权);
ANFIS信息:节点数:55线性参数数:80非线性参数数:24参数总数:104训练数据对数:500检验数据对数:500模糊规则数:16开始训练ANFIS…1 0.00296046 0.00292488 2 0.00290346 0.0028684 3 0.00285048 0.00281544 4 0.00280117 0.00276566 5 0.00275517 0.002718746 0.00271214 0.00267438 7 0.00266783 0.00262818 8 0.00262626 0.00258435 9 0.00258702 0.00254254步长增加到0.012100后纪元9。10 0.00254972 0.00250247指定epoch number reached—> ANFIS training completed at epoch 10最小训练RMSE = 0.002550最小检查RMSE = 0.00250247
fis1
为训练误差最小的训练时期的训练模糊推理系统。因为你指定了验证数据,带有最小检查错误的模糊系统,fis2
,也被退回。检测误差最小的FIS在训练数据之外具有最好的泛化效果。
绘制受训系统的隶属函数。
图次要情节(2 2 1)plotmf (fis2,<年代pan style="color:#A020F0">“输入”1)次要情节(2,2,2)plotmf (fis2,<年代pan style="color:#A020F0">“输入”, 2)次要情节(2,2,3)plotmf (fis2,<年代pan style="color:#A020F0">“输入”3)次要情节(2,2,4)plotmf (fis2,<年代pan style="color:#A020F0">“输入”4)
绘制训练和检查错误信号。
图([error1 error2])保持<年代pan style="color:#A020F0">在情节([error1 error2),<年代pan style="color:#A020F0">“o”)传说(<年代pan style="color:#A020F0">“训练误差”,<年代pan style="color:#A020F0">检查错误的)包含(<年代pan style="color:#A020F0">“时代”) ylabel (<年代pan style="color:#A020F0">“均方根误差”)标题(<年代pan style="color:#A020F0">的误差曲线)
各时期的训练误差均高于检测误差。这种现象在ANFIS学习或非线性回归中普遍存在;这可能表明,额外的培训可以产生更好的培训效果。
为了检查训练系统的预测能力,使用训练和检查数据对模糊系统进行评估,并将结果与原始数据一起绘图
anfis_output = evalfis (fis2, [trnData (:, 1:4);chkData (: 1:4)]);Figure index = 125:1124;情节(时间(指数),[x(指数)anfis_output])包含(<年代pan style="color:#A020F0">的时间(秒))标题(<年代pan style="color:#A020F0">MG时间序列和ANFIS预测)
预测的级数与原始级数相似。
计算并绘制预测误差。
Diff = x(index) - anfis_output;情节(时间(索引),diff)包含(<年代pan style="color:#A020F0">的时间(秒))标题(<年代pan style="color:#A020F0">预测错误的)
预测误差图的尺度大约是时间序列图尺度的百分之一。在这个例子中,您只训练了系统10 epoch。附加纪元训练可以提高训练效果。
简称anfis
|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">evalfis
|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">genfis