这个例子显示了混沌时间序列预测使用一个调谐的2型模糊推理系统(FIS)。这个例子使用粒子群优化调整FIS,这需要全局优化工具箱™软件。
此示例使用以下形式的Mackey-Glass(MG)非线性延迟微分方程模拟时间序列数据。
使用以下配置模拟1200个样本的时间序列:
采样时间 秒
初始条件
为 .
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预测某一时刻的未来价值 .这种类型的预测的标准方法是创建一个映射D采样数据点,及时采样每个Δ单位( )到一个预测的未来价值 .对于本例,set 和 .因此,对于每一个T,输入和输出训练数据集为 和 ,分别。换句话说,用四个连续的已知时间序列值来预测下一个值。
从样本中创建1000个输入/输出数据集 到
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个数据集作为训练数据(trnX
和trnY
)第二个500组作为验证数据(vldX
和vldY
).
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,请使用以下三个步骤。
学习规则库,同时保持输入和输出MF参数不变。
调整输出MF参数和输入的上限MF参数,同时保持规则和下限MF参数不变。
调整输入的较低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)])图例([“实际产出”“预期的输出”],“位置”,“东北”)结束