利用ANFIS预测混沌时间序列

这个例子展示了如何使用ANFIS进行混沌时间序列预测。

时间序列数据

这个示例使用简称anfis来预测由以下mackkey - glass (MG)时滞微分方程生成的时间序列。

x ˙ t 0 2 x t - τ 1 + x 1 0 t - τ - 0 1 x t

这个时间序列是混沌的,没有明确的周期定义。级数不收敛或发散,轨迹对初始条件高度敏感。这个基准问题被用于神经网络和模糊建模研究领域。

为了得到整数点上的时间序列值,采用四阶龙格-库塔法对之前的MG方程进行数值求解。人们认为<年代pan class="inlineequation"> x 0 1 2 ,<年代pan class="inlineequation"> τ 1 7 ,<年代pan class="inlineequation"> x t 0 为<年代pan class="inlineequation"> t < 0 .结果保存在文件中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"> t ,来预测未来某一时刻的价值,<年代pan class="inlineequation"> t + P .这种类型的预测的标准方法是创建一个映射<年代pan class="inlineequation"> D 采样数据点,采样每一个<年代pan class="inlineequation"> Δ 时间单位(<年代pan class="inlineequation"> x t - D - 1 Δ ... x t - Δ x t )到一个预测的未来价值<年代pan class="inlineequation"> x t + P .按照预测MG时间序列的常规设置,设置<年代pan class="inlineequation"> D 4 和<年代pan class="inlineequation"> Δ P 6 .为每一个<年代pan class="inlineequation"> t ,输入训练数据简称anfis是如下形式的四列向量。

w t x t - 1 9 x t - 1 2 x t - 6 x t

输出的训练数据与轨迹预测相对应。

年代 t x t + 6

为每一个<年代pan class="inlineequation"> t ,值从118到1117,有1000个输入/输出训练样本。对于本例,使用前500个样本作为训练数据(trnData)和第二个500值作为验证的检查数据(chkData).训练和检查数据数组的每一行都包含一个样本点,其中前四列包含四维输入<年代pan class="inlineequation"> w 第五列包含输出<年代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"> 2 4 = 16条模糊规则,104个参数(24个非线性参数,80个线性参数)。为了获得良好的泛化能力,重要的是训练数据点的数量要比估计的参数数量大几倍。在本例中,数据与参数的比值约为5(500/104),这是拟合参数与训练样本点之间的良好平衡。

简称ANFIS训练模型

要配置培训选项,请创建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。附加纪元训练可以提高训练效果。

另请参阅

|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">|<年代pan itemscope itemtype="//www.tianjin-qmedu.com/help/schema/MathWorksDocPage/SeeAlso" itemprop="seealso">

相关的话题