主要内容

曲调FIS树一加仑汽油所行驶的里程的预测

这个例子展示了如何调优参数FIS的树,这是一个集合的模糊推理系统连接。这个示例使用粒子群搜索优化和模式,这需要全局优化工具箱™软件。

汽车燃料消耗量预测在英里每加仑(MPG)是一种典型的非线性回归问题。它使用一些汽车配置文件属性预测燃料消耗。训练数据可用在加利福尼亚大学欧文分校机器学习库和包含的数据收集从汽车各种品牌和型号。

这个示例使用以下六个输入数据属性预测输出数据属性MPG FIS树:

  1. 气缸数

  2. 位移

  3. 马力

  4. 重量

  5. 加速度

  6. 模型一年

准备数据

加载数据。从存储库获得数据集的每一行代表一个不同的汽车。

数据= loadGasData;

数据包含7列,前六列包含以下输入属性。

  • 气缸数

  • 位移

  • 马力

  • 重量

  • 加速度

  • 模型一年

第七列包含输出属性,英里/加仑。

创建单独的输入和输出数据集,XY,分别。

X =数据(:,1:6);(Y =数据:7);

输入和输出数据集分割成训练数据(奇数样本)和验证数据(偶数样本)。

trnX = X(1:2:最终,);%的训练输入数据集trnY = Y(1:2:最终,);%训练输出数据集vldX = X(2:2:最终,);%验证输入数据集vldY = Y(2:2:最终,);%验证输出数据集

提取每个数据属性的范围,您将使用输入/输出范围定义在FIS建设。

dataRange = [min(数据)“马克斯(数据)”);

构造一个FIS树

对于这个示例,构造一个FIS树使用以下步骤:

  1. 排名的输入与输出基于相关性的属性的属性。

  2. 使用排名输入创建多个FIS对象属性。

  3. 构造一个FIS FIS对象树。

根据相关系数排序输入

计算训练数据的相关系数。在最后一行的相关矩阵,前六个元素显示六把数据属性之间的相关系数和输出属性。

c1 = corrcoef(数据);c1(最终,:)
ans =1×7-0.7776 -0.8051 -0.7784 -0.8322 0.4233 0.5805 1.0000

第一个四个输入属性-值,最后两个输入属性具有积极的价值。

等级降序排列的输入属性有负相关性,其相关系数的绝对值。

  1. 重量

  2. 位移

  3. 马力

  4. 气缸数

等级降序排列的输入属性有正相关性,相关系数的绝对值。

  1. 模型一年

  2. 加速度

这些排名显示,体重和年型与MPG正面和负面的相关性最高,分别。

建立模糊推理系统

对于这个示例,实现一个FIS树下面的结构。

FIS树使用多个two-input-one-output FIS对象减少的总数规则中使用的推理过程。fis1,fis2,fis3直接输入值并生成中间英里/加仑值,进一步结合使用fis4fis5

输入属性与正面和负面的关联值配对结合正面和负面影响的输出预测。输入分组根据他们的排名如下:

  • 重量和车型

  • 位移和加速度

  • 马力和缸数

最后一组只包含负相关值的输入,因为只有两个输入值正相关。

这个示例使用Sugeno-type FIS对象在调优过程中更快的评价比Mamdani系统。每个FIS包括两个输入和一个输出,每个输入默认包含两个三角形隶属度函数(MFs)和输出包括4 MFs默认常数。指定输入和输出范围使用相应的数据属性范围。

今年前FIS结合了重量和模型属性。

fis1 = sugfis (“名字”,“fis1”);fis1 = addInput (fis1 dataRange (4:)“NumMFs”2,“名字”,“重量”);fis1 = addInput (fis1 dataRange (6:)“NumMFs”2,“名字”,“年”);fis1 = addOutput (fis1 dataRange (7:)“NumMFs”4);

第二个FIS结合位移和加速度的属性。

fis2 = sugfis (“名字”,“fis2”);fis2 = addInput (fis2, dataRange (2:)“NumMFs”2,“名字”,“位移”);fis2 = addInput (fis2, dataRange (5:)“NumMFs”2,“名字”,“加速”);fis2 = addOutput (fis2, dataRange (7:)“NumMFs”4);

第三FIS结合汽缸的马力和数量属性。

fis3 = sugfis (“名字”,“fis3”);fis3 = addInput (fis3 dataRange (3:)“NumMFs”2,“名字”,“马力”);fis3 = addInput (fis3 dataRange (1:)“NumMFs”2,“名字”,“气缸”);fis3 = addOutput (fis3 dataRange (7:)“NumMFs”4);

第四FIS结合了第一和第二FIS的输出。

fis4 = sugfis (“名字”,“fis4”);fis4 = addInput (fis4 dataRange (7:)“NumMFs”2);fis4 = addInput (fis4 dataRange (7:)“NumMFs”2);fis4 = addOutput (fis4 dataRange (7:)“NumMFs”4);

最后FIS结合了第三和第四FIS并生成的输出估计英里/加仑。这个金融中间人有相同的输入和输出范围第四金融中间人。

fis5 = fis4;fis5。Name =“fis5”;fis5.Outputs (1)。Name =“英里”;

构建FIS树

将模糊系统(fis1,fis2,fis3,fis4,fis5)根据FIS树图。

fisTin = fistree ([fis1 fis2 fis3 fis4 fis5], [“fis1 / output1”“fis4 / input1”;“fis2 / output1”“fis4 / input2”;“fis3 / output1”“fis5 / input2”;“fis4 / output1”“fis5 / input1”])
fisTin = fistree属性:名称:“fistreemodel”FIS: [1 x5 sugfis]连接:[4 x2字符串)输入:x1字符串[6]输出:“fis5 /英里”DisableStructuralChecks: 0看到getTunableSettings参数优化方法。

优化金融中间人与训练数据树

调优执行两个步骤。

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

  2. 优化的参数输入/输出MFs和规则。

第一步是少计算昂贵由于小数量的规则参数,它快速地收敛于一个模糊规则库中训练。在第二步中,从第一步使用规则库作为初始条件提供了快速收敛的参数调优过程。

学习规则

学习规则库,首先使用一个指定优化选项tunefisOptions对象。遗传算法全局优化方法(或粒子群)适用于初始训练时所有的模糊系统的参数都不调谐的。对于这个示例,调优FIS树使用粒子群优化方法(“particleswarm”)。

学习新规则,设置OptimizationType“学习”。限制规则的最大数量为4。调整规则的数量可以低于这一限制,每个FIS自调优过程移除重复的规则。

选择= tunefisOptions (“方法”,“particleswarm”,“OptimizationType”,“学习”,“NumMaxRules”4);

如果你有并行计算工具箱™软件,你可以通过设置提高优化过程的速度options.UseParallel真正的。如果你没有并行计算工具箱软件,集options.UseParallel

设定最大迭代次数为50。减少培训规则学习过程中的错误,你可以增加迭代的数量。然而,使用太多的迭代可以overtune FIS树训练数据,增加了验证错误。

options.MethodOptions。MaxIterations = 50;

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

rng (“默认”)

调优FIS树使用指定的调优数据和选择。设置输入训练数据的顺序根据FIS树连接如下:重量,一年,位移,加速度,马力,气缸

inputOrders1 = [4 6 2 5 3 1];orderedTrnX1 = trnX (:, inputOrders1);

学习规则tunefis函数大约需要4分钟。对于这个示例,使优化设置runtunefis真正的。加载pretrained结果没有运行tunefis,你可以设置runtunefis

runtunefis = false;

参数设置可以是空的,当学习新的规则。有关更多信息,请参见tunefis

如果[],runtunefis fisTout1 = tunefis (fisTin orderedTrnX1, trnY,选项);% #好< UNRCH >其他的tunedfis =负载(“tunedfistreempgprediction.mat”);fisTout1 = tunedfis.fisTout1;rmseValue = calculateRMSE (fisTout1 orderedTrnX1 trnY);流(“培训RMSE = %。3 f MPG \ n”,rmseValue);结束
培训RMSE = 3.399 MPG

最好的f (x)列显示训练均方误差(RMSE)。

学习过程的新规则生成一组FIS树。

流(“规则总数= % d \ n”元素个数([fisTout1.FIS.Rules]));
规则总数= 17

学习系统应该有类似的RMSE性能训练和验证数据集。计算的RMSE验证数据集,评估fisout1使用验证输入数据集vldX。隐藏在评估运行时警告,设置所有警告选项没有一个

计算之间的RMSE生成的输出数据和输出数据集验证vldY。自从训练和验证错误是相似的,不overfit训练数据的学习系统。

orderedVldX1 = vldX (:, inputOrders1);plotActualAndExpectedResultsWithRMSE (fisTout1 orderedVldX1 vldY)

图包含2轴对象。坐标轴对象1标题RMSE = 3.4626 MPG,包含验证输入数据集索引,ylabel MPG包含3条类型的对象。这些对象代表实际MPG,预计MPG,最低的实际和预期的值。坐标轴对象2与标题之间的区别实际和预期值,包含验证输入数据集索引,ylabel错误(MPG)包含一个对象类型的酒吧。

调整所有参数

学习新规则后,调整输入/输出参数与曼氏金融的参数学习规则。获得FIS树的可调参数,使用getTunableSettings函数。

[,,规则]= getTunableSettings (fisTout1);

优化现有FIS树参数设置没有学习新规则,设置OptimizationType“优化”

选项。OptimizationType =“优化”;

因为FIS树已经习得的规则使用训练数据,使用本地优化方法的快速收敛的参数值。对于这个示例,使用模式搜索优化方法(“patternsearch”)。

选项。方法=“patternsearch”;

优化FIS树参数比以前需要更多的迭代规则学习步骤。因此,提高优化过程的最大迭代次数为75。作为第一个调优阶段,您可以通过增加迭代次数减少训练错误。然而,使用太多的迭代可以overtune训练数据的参数,增加了验证错误。

options.MethodOptions。MaxIterations = 75;

改善模式搜索结果,设置方法的选择UseCompletePoll为true。

options.MethodOptions。UseCompletePoll= true;

调优FIS树使用指定的可调参数设置,训练数据,调优选项。

调优参数值与tunefis函数过程需要几分钟的时间。加载pretrained结果没有运行tunefis,你可以设置runtunefis

rng (“默认”)如果runtunefis fisTout2 = tunefis (fisTout1;;规则,orderedTrnX1, trnY,选项);% #好< UNRCH >其他的fisTout2 = tunedfis.fisTout2;rmseValue = calculateRMSE (fisTout2 orderedTrnX1 trnY);流(“培训RMSE = %。3 f MPG \ n”,rmseValue);结束
培训RMSE = 3.037 MPG

结束的时候调优过程中,训练误差降低了比前一步。

检查性能

验证的性能调优FIS树,fisout2使用验证输入数据集vldX

比较预期的MPG获得验证输出数据集vldY和实际MPG生成的使用fisout2。计算之间的RMSE这些结果。

plotActualAndExpectedResultsWithRMSE (fisTout2 orderedVldX1 vldY)

图包含2轴对象。坐标轴对象1标题RMSE = 3.3501 MPG,包含验证输入数据集索引,ylabel MPG包含3条类型的对象。这些对象代表实际MPG,预计MPG,最低的实际和预期的值。坐标轴对象2与标题之间的区别实际和预期值,包含验证输入数据集索引,ylabel错误(MPG)包含一个对象类型的酒吧。

优化FIS树参数提高了RMSE相比的结果初步学会了规则库。由于训练和验证错误是相似的,不是overtuned参数值。

分析中间数据

来洞察你的模糊树的操作,您可以添加组件的输出模糊系统输出FIS的树。对于这个示例,访问中间FIS输出,添加三个额外的输出调FIS树。

fisTout3 = fisTout2;fisTout3.Outputs结束(+ 1)=“fis1 / output1”;fisTout3.Outputs结束(+ 1)=“fis2 / output1”;fisTout3.Outputs结束(+ 1)=“fis3 / output1”;

产生额外的输出,对增强FIS树,fisTout3

actY = evaluateFIS (fisTout3 orderedVldX1);图绘制(actY(:,(1 2 3 4)))包含(“输入数据集指数”)ylabel (“英里”),轴([1 200 0 55])([传奇“fis1输出”“fis2输出”“fis3输出”“fis5输出”),“位置”,“东北”,“NumColumns”2)标题(“中间和最终输出”)

图包含一个坐标轴对象。坐标轴对象与标题中间和最终输出,包含输入数据集索引,ylabel MPG包含4线类型的对象。这些对象代表fis1的输出,输出fis2, fis5 fis3的输出、输出。

FIS的最终输出树(fis5输出)似乎是高度相关的输出fis1fis3。来验证这个评估,检查相关系数FIS的输出。

c2 = corrcoef (actY (:, (1 2 3 4)));c2(最终,:)
ans =1×40.9541 0.8245 -0.8427 1.0000

最后一行的相关矩阵显示的输出fis1fis3(分别为第一和第三列)相比有更高的相关性与最终的输出的输出fis2(第二列)。这一结果表明,简化FIS树通过移除fis2fis4,可能会产生类似的培训结果相比原来的树结构。

简化和重新培训FIS树

删除fis2fis4从FIS树和连接的输出fis1第一个输入fis5。当你删除一个FIS FIS树,任何现有的连接,FIS也删除。

fisTout3。金融中间人([2 - 4])= [];fisTout3.Connections (+ 1,:) = (“fis1 / output1”“fis5 / input1”];fis5.Inputs (1)。Name =“fis1out”;

让FIS树输出的数量匹配输出的数量在训练数据,删除FIS树输出fis1fis3

fisTout3.Outputs(2:结束)= [];

更新输入训练数据顺序根据新的FIS树输入配置。

inputOrders2 = [4 6 3 1];orderedTrnX2 = trnX (:, inputOrders2);

因为FIS树配置更改,必须重新学习和调优步骤。在学习阶段,现有的规则参数也调到适合FIS树的新配置。

选项。方法=“particleswarm”;选项。OptimizationType =“学习”;options.MethodOptions。MaxIterations = 50;[~,~,规则]= getTunableSettings (fisTout3);rng (“默认”)如果runtunefis fisTout4 = tunefis (fisTout3、规则、orderedTrnX2 trnY,选项);% #好< UNRCH >其他的fisTout4 = tunedfis.fisTout4;rmseValue = calculateRMSE (fisTout4 orderedTrnX2 trnY);流(“培训RMSE = %。3 f MPG \ n”,rmseValue);结束
培训RMSE = 3.380 MPG

在训练阶段,隶属函数的参数和规则调整。

选项。方法=“patternsearch”;选项。OptimizationType =“优化”;options.MethodOptions。MaxIterations = 75;options.MethodOptions。UseCompletePoll= true; [in,out,rule] = getTunableSettings(fisTout4); rng(“默认”)如果runtunefis fisTout5 = tunefis (fisTout4;;规则,orderedTrnX2, trnY,选项);% #好< UNRCH >其他的fisTout5 = tunedfis.fisTout5;rmseValue = calculateRMSE (fisTout5 orderedTrnX2 trnY);流(“培训RMSE = %。3 f MPG \ n”,rmseValue);结束
培训RMSE = 3.049 MPG

在优化过程的结束,FIS树包含更新MF和规则参数值。新的FIS树配置的规则库大小小于之前的配置。

流(“规则总数= % d \ n”元素个数([fisTout5.FIS.Rules]));
规则总数= 11

检查的性能简化FIS树

评估更新FIS树使用四个输入数据集的属性检查。

orderedVldX2 = vldX (:, inputOrders2);plotActualAndExpectedResultsWithRMSE (fisTout5 orderedVldX2 vldY)

图包含2轴对象。坐标轴对象1标题RMSE = 3.1524 MPG,包含验证输入数据集索引,ylabel MPG包含3条类型的对象。这些对象代表实际MPG,预计MPG,最低的实际和预期的值。坐标轴对象2与标题之间的区别实际和预期值,包含验证输入数据集索引,ylabel错误(MPG)包含一个对象类型的酒吧。

简化FIS树有四个输入属性的RMSE产生更好的结果比第一次配置,使用6个输入属性。因此,它表明FIS树可以用更少的投入和推广训练数据的规则。

结论

你可以进一步提高的训练误差调整FIS树:

  • 越来越多的迭代规则学习和参数阶段。这样做增加了优化过程的持续时间,还可以增加验证错误由于overtuned训练数据的系统参数。

  • 使用全局优化方法,如遗传算法particleswarm规则学习和参数阶段。遗传算法particleswarm大型参数调优范围表现更好因为他们是全局优化。另一方面,patternsearchsimulannealbnd执行更好的为小参数范围,因为它们是局部优化。如果规则已经添加到FIS树使用训练数据patternsearchsimulannealbnd可能产生更快的收敛性比吗遗传算法particleswarm。更多信息在这些优化方法及其选择,明白了遗传算法(全局优化工具箱),particleswarm(全局优化工具箱),patternsearch(全局优化工具箱),simulannealbnd(全局优化工具箱)

  • 改变FIS属性,如FIS的类型、数量的输入,输入/输出MFs, MF类型和数量的规则。模糊系统与大量的输入,Sugeno FIS通常收敛速度比Mamdani FIS自Sugeno系统输出MF参数(如果少了常数MFs)和使用更快的去模糊化。少量MFs和规则减少参数调优,生产更快的优化过程。此外,大量的规则可能overfit训练数据。

  • 修改可调参数设置MFs和规则。例如,您可以调整一个三角形的曼氏金融的支持在不改变峰值位置。万博1manbetx这样做减少了可调参数的数量和具体应用程序可以产生更快的优化过程。对于规则,可以排除零曼氏金融指数通过设置AllowEmpty可调设置,这减少了规则总数在学习阶段。

  • 改变FIS树属性,如数量的模糊系统与模糊系统之间的连接。

  • 使用不同的排序和分组输入FIS的树。

本地函数

函数plotActualAndExpectedResultsWithRMSE (fis, x, y)%计算RMSE实际与预期的结果(rmse actY] = calculateRMSE (fis, x, y);%绘制结果图次要情节(2,1,1)酒吧(actY)栏(y)栏(min (actY y),“FaceColor”[0.5 0.5 0.5])轴([0 200 0 60])包含(“验证输入数据集指数”),ylabel (“英里”)传说([“实际MPG”“预期MPG”“最小的实际和预期值”),“位置”,“西北”)标题(" RMSE = "+ num2str (rmse) +“英里”次要情节(2,1,2)酒吧(actY-y)包含(“验证输入数据集指数”),ylabel (“错误(MPG)”)标题(“实际和预期值之间的差异。”)结束函数[rmse, actY] = calculateRMSE (fis, x, y)%评估金融中间人actY = evaluateFIS (fis, x);%计算RMSE德尔= actY - y;rmse =√意味着(del。^ 2));结束函数x y = evaluateFIS (fis)%为FIS评估指定选项持续的evalOptions如果isempty (evalOptions) evalOptions = evalfisOptions (“EmptyOutputFuzzySetMessage”,“没有”,“NoRuleFiredMessage”,“没有”,“OutOfRangeInputValueMessage”,“没有”);结束%评估金融中间人x, y = evalfis (fis evalOptions);结束

另请参阅

|||

相关的话题