利用2型FIS预测混沌时间序列

这个例子显示了混沌时间序列预测使用一个调谐的2型模糊推理系统(FIS)。这个例子使用粒子群优化调整FIS,这需要全局优化工具箱™软件。

时间序列数据

此示例使用以下形式的Mackey-Glass(MG)非线性延迟微分方程模拟时间序列数据。

x ˙ ( T ) = 0 2. x ( T - τ ) 1. + x 10 ( T - τ ) - 0 1. x ( T )

使用以下配置模拟1200个样本的时间序列:

  • 采样时间 T s = 1.

  • 初始条件 x ( 0 ) = 1. 2.

  • τ = 20

  • x ( T - τ ) = 0 T < τ

ts=1;numSamples=1200;tau=20;x=0(1,numSamples+tau+1);x(tau+1)=1.2;t = 1 +τ:numSamples + x (t-tau) /τx_dot = 0.2 * (1 + (x (t-tau)) ^ 10) -0.1 * x (t);X (t+1) = X (t) + ts*x_dot;结束

绘制模拟的MG时间序列数据。

图(1)情节(x(τ)+ 2:结束)标题(“麦基·格拉斯混沌时间序列”)包含(的时间(秒)) ylabel (“x (t)”)

生成培训和验证数据

时间序列预测使用截至时间的已知时间序列值T预测某一时刻的未来价值 T + P .这种类型的预测的标准方法是创建一个映射D采样数据点,及时采样每个Δ单位( x ( T - ( D - 1. ) Δ ) , , x ( T - Δ ) , x ( T ) )到一个预测的未来价值 x = ( T + P ) .对于本例,set D = 4. Δ = P = 1. .因此,对于每一个T,输入和输出训练数据集为 [ x ( T - 3. ) , x ( T - 2. ) , x ( T - 1. ) , x ( T ) ] x ( T + 1. ) ,分别。换句话说,用四个连续的已知时间序列值来预测下一个值。

从样本中创建1000个输入/输出数据集 x ( One hundred. + D - 1. ) x ( 1100 + D - 2. )

D = 4;inputData = 0 (1000 D);outputData = 0 (1000 1);t = 100 + D-1:1100 + d2的i=1:D输入数据(t-100-D+2,i)=x(t-D+i);结束输出数据(t-100-D+2,:)=x(t+1);结束

使用前500个数据集作为训练数据(trnXtrnY)第二个500组作为验证数据(vldXvldY).

trnX = inputData (1:50 0:);trnY = outputData (1:50 0:);vldX = inputData(501年:,);vldY = outputData(501年:,);

构建金融中间人

此示例使用2型Sugeno FIS。由于Sugeno FIS的可调参数比Mamdani FIS少,因此Sugeno系统在优化过程中通常收敛更快。

fisin = sugfistype2;

添加三个输入,每个输入都有三个默认的三角成员函数(MFs)。首先,通过设置每个下MF等于其相应的上MF来消除每个输入MF的不确定性足迹(FOU)。为此,将每个较低MF的规模和滞后值设置为1.0,分别。通过消除所有输入成员函数的FOU,可以将type-2 FIS配置为与type-1 FIS类似的行为。

numInputs = D;numInputMFs = 3;Range = [min(x) max(x)];i=1:numInputs fisin=addInput(fisin,范围,“NumMFs”, numInputMFs);j=1:numInputMFs fisin.Inputs(i).MembershipFunctions(j).LowerScale=1;fisin.Inputs(i).MembershipFunctions(j).LowerLag=0;结束结束

对于预测,向FIS添加一个输出。输出包含默认的常量成员关系函数。要为输入-输出映射提供最大分辨率,请将输出MF的数量设置为等于输入MF组合的数量。

numOutputMFs = numInputMFs ^ numInputs;fisin = addOutput (fisin、范围、“NumMFs”,numOutputMFs);

查看FIS结构。最初,FIS没有任何规则。系统的规则是在调优过程中发现的。

plotfis(fisin)

使用训练数据调整FIS

要调整FIS,请使用以下三个步骤。

  1. 学习规则库,同时保持输入和输出MF参数不变。

  2. 调整输出MF参数和输入的上限MF参数,同时保持规则和下限MF参数不变。

  3. 调整输入的较低MF参数,同时保持规则、输出MF和较高MF参数不变。

由于规则参数数量较少,第一步的计算成本较低,并且在训练过程中快速收敛到模糊规则库。第二步后,系统是经过训练的1型FIS。第三步生成经过调整的2型FIS。

学习规则

要了解规则库,请首先使用tunefisOptions对象。

选项=所有选项;

由于FIS不包含任何预设的模糊规则,使用全局优化方法(遗传算法或粒子群)来学习规则。与局部优化方法(模式搜索和模拟退火)相比,全局优化方法在大参数调整范围内的性能更好。对于本例,使用粒子群优化优化FIS (“particleswarm”).

选项。方法=“particleswarm”;

要学习新规则,先设定规则OptimizationType“学习”

选项。OptimizationType =“学习”;

将规则的最大数量限制为输入MF组合的数量。调优规则的数量可以小于这个限制,因为调优过程会删除重复的规则。

options.NumMaxRules=numInputMFs^numInputs;

如果您有Parallel Computing Toolbox™软件,您可以通过设置来提高调优过程的速度UseParallel真正的。如果没有并行计算工具箱软件,请设置UseParallel

选项。UseParallel = false;

将最大迭代次数设置为10。增加迭代次数可以减少训练错误。但是,较大的迭代次数会增加调整过程的持续时间,并可能使规则参数与训练数据过度协调。

options.MethodOptions.MaxIterations = 10;

由于粒子群优化使用随机搜索,为了获得可重复的结果,将随机数生成器初始化为其默认配置。

rng (“默认”)

使用tunefis函数需要几分钟。对于本例,请通过设置启用调整runtunefis真正的.在不跑步的情况下加载预先训练的结果tunefis,您可以设置runtunefis

runtunefis=false;

使用指定的训练数据和选项调优FIS。

如果runtunefis fisout1 = tunefis(fisin,[],trnX,trnY,options);其他的tunedfis =负载(“tunedfischaotictimeseriestype2.mat”);fisout1=tunedFS.fisout1;结束

查看经过培训的FIS的结构,其中包含新学习的规则。

plotfis(fisout1)

检查由所学的规则库调整的单个输入-输出关系。例如,下图显示了第二个输入和输出之间的关系。

gensurf (fisout1 gensurfOptions (“输入索引”2))

使用输入验证数据评估调整后的FIS。绘制实际生成的输出与预期验证输出,并计算均方根误差(RMSE)。

plotActualAndExpectedResultsWithRMSE (fisout1 vldX vldY)

调优上层成员函数参数

调优上层成员函数参数。2型Sugeno FIS只支持清晰的输出万博1manbetx函数。因此,这个步骤调整输入的上mf和清晰的输出函数。

使用获取输入和输出参数设置无法获取的设置.由于FIS使用三角形输入mf,您可以使用非对称滞后值来优化输入mf。

[,] = getTunableSettings (fisout1“AsymmetricLag”,对);

关闭较低MF参数的调谐。

i=1:长度(英寸)j=1:length(in(i).MembershipFunctions(j).LowerScale.Free=false;in(i).MembershipFunctions(j).LowerLag.Free=false;结束结束

要在保持rulebase常量的同时优化现有可调MF参数,请设置OptimizationType“优化”

选项。OptimizationType =“优化”;

使用指定的调优数据和选项调优FIS。在不跑步的情况下加载预先训练的结果tunefis,您可以设置runtunefis

rng (“默认”)如果runtunefis fisout2 = tunefis(fisout1,[in;out],trnX,trnY,options);其他的tunedfis =负载(“tunedfischaotictimeseriestype2.mat”);fisout2 = tunedfis.fisout2;结束

查看经过训练的FIS的结构,它现在包含调谐的上MF参数。

plotfis(fisout2)

使用验证数据评估调优的FIS,计算RMSE,并用预期的验证输出绘制实际生成的输出。

plotActualAndExpectedResultsWithRMSE (fisout2 vldX vldY)

调整上部MF参数可提高FIS的性能。此结果相当于调整1型FIS。

调优较低的成员函数参数

只调优输入的较低MF参数。为此,将较低的刻度和滞后值设置为可调值,并禁用对较高MF参数的调优。

i=1:长度(英寸)j=1:length(in(i).MembershipFunctions(j).UpperParameters.Free=false;in(i).MembershipFunctions(j).LowerScale.Free=true;in(i).MembershipFunctions(j).LowerLag.Free=true;结束结束

使用指定的调优数据和选项调优FIS。在不跑步的情况下加载预先训练的结果tunefis,您可以设置runtunefis

rng (“默认”)如果runtunefis fisout3 = tunefis(fisout2,in,trnX,trnY,options);其他的tunedfis =负载(“tunedfischaotictimeseriestype2.mat”);fisout3=调谐的fs.fisout3;结束

观察训练的FIS的结构,现在包含调谐的较低的MF参数。

plotfis(fisout3)

使用验证数据评估调优的FIS,计算RMSE,并用预期的验证输出绘制实际生成的输出。

绘图实际值和预期结果开关(fisout3、vldX、vldY)

同时调整上下MF值可以提高FIS的性能。当训练的FIS包含调谐的上、下参数值时,均方根误差得到改善。

结论

与type-1 MFs相比,Type-2 MFs提供了额外的可调参数。因此,在有足够的训练数据的情况下,经过调整的2型FIS比经过调整的1型FIS更适合训练数据。

总之,您可以通过修改以下FIS属性或调优选项来产生不同的调优结果:

  • 输入数量

  • MFs的数量

  • MFs的类型

  • 优化方法

  • 调整迭代次数

本地函数

函数[rmse, actY] = calculateRMSE (fis, x, y)%指定FIS评估选项蒸发量=蒸发量(“清空PutFuzzySetMessage”,“没有”,...“NoRuleFiredMessage”,“没有”,“OutOfRangeInputValueMessage”,“没有”);%评估金融中间人actY = evalfis (fis, x, evalOptions);%计算RMSEdel = actY - y;rmse =√意味着(del。^ 2));结束函数绘图仪实际值和预期结果开关rmse(fis,vldX,vldY)[rmse,actY]=计算器MSE(fis,vldX,vldY);图形绘图仪([actY vldY])轴([0长度(vldY)最小值(vldY)-0.01最大值(vldY)+0.13])xlabel(“样本索引”) ylabel (的信号值)标题(“RMSE=”num2str(rmse)])图例([“实际产出”“预期的输出”],“位置”,“东北”)结束

另见

|

相关的话题