这个例子展示了如何使用ANFIS进行混沌时间序列预测。
这个示例使用简称anfis
预测由以下麦基-格拉斯(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.00271874步长在第五阶段后增加到0.011000。6 0.00271214 0.00267438 7 0.00266783 0.00262818 8 0.00262626 0.00258435 9 0.00258702 0.00254254步长在epoch 9之后增加到0.012100。10 0.00254972 0.00250247指定纪元数达到——> ANFIS训练在第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)]);图索引= 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.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">evalfis
|<年代pan itemscope itemtype="//www.tatmou.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">genfis