主要内容

曲调Mamdani模糊推理系统

此示例显示了如何调整Mamdani模糊推理系统(FIS)的隶属函数(MF)和规则参数。此示例使用粒子群和模式搜索优化,需要全局优化工具箱™软件。

汽车油耗预测是一个典型的非线性回归问题。它使用几个汽车外形属性来预测油耗。培训数据在加州大学欧文分校(University of California at Irvine)机器学习存储库包含从各种制作和模型的汽车收集的数据。

此示例使用以下六个输入数据属性来预测具有FIS的输出数据属性MPG:

  1. 气缸数量

  2. 移位

  3. 马力

  4. 重量

  5. 加速度

  6. 模型一年

准备数据

加载数据。从存储库获得的每行数据集代表了不同的汽车配置文件。

(数据、名称)= loadGasData;

从属性名称中删除前导和尾随空格。

name = strtrim(string(name));

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

  • 气缸数量

  • 移位

  • 马力

  • 重量

  • 加速度

  • 模型一年

第七列包含输出属性MPG。

创建单独的输入和输出数据集,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(data)'max(data)'];

使用Data属性范围构造FIS

创建Mamdani FIS进行调整。

fisin = mamfis;

向FIS添加输入和输出变量,其中每个变量代表一个数据属性。对于每个变量,使用相应的属性名和范围。

为了减少规则的数量,为每个输入变量使用两个mf,这将导致 2 6. = 64. 输入MF组合。因此,FIS使用与输入MF组合相对应的最多64条规则。

为了提高培训数据超出数据泛化,请使用64 MF为输出变量。这样做允许FIS为每个规则使用不同的输出MF。

输入和输出变量都使用默认的三角形MFs,它们均匀分布在变量范围内。

为了i = 1: 0, i = 1, i = 1,'名称',(我),'nummfs',2);结尾fisin = addoutput(fisin,datarange(7,:),'名称',名称(7),'nummfs',64);

查看FIS结构。最初,FIS具有零规则。在调整过程中找到了系统的规则。

图plotfis (fisin)

图包含8个轴。轴1包含2个类型的2个物体。轴2包含2个类型的2个物体。轴3包含2个类型的线。轴4包含2个类型的型号。轴5包含2个类型的类型。轴6包含2个类型的物体。轴7包含64个类型的线路。轴8包含3个类型文本的对象。

调整与培训数据的FIS

调整分两步执行。

  1. 在保持输入和输出MF参数常量的同时了解规则库。

  2. 调整输入/输出MFS和规则的参数。

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

学习规则

要学习规则库,首先使用a指定调整选项tunefisOptions目的。由于FIS允许大量的输出MFS(在规则后果中使用),因此使用全局优化方法(遗传算法或粒子群)。与局部优化方法相比(模式搜索和仿真退火)相比,这种方法在大参数调谐范围内更好地执行。对于此示例,使用粒子群优化方法调整FIS('particleswarm')。

要学习新规则,请设置优化类型'学习'。将最大规则数限制为64.调整规则的数量可以小于此限制,因为调整过程删除重复规则。

选择= tunefisOptions (“方法”'particleswarm'......“OptimizationType”'学习'......'nummaxrules',64);

如果您有并行计算工具箱™软件,可以通过设置提高调整过程的速度选项.UseCall真正的。如果您没有并行计算工具箱软件,请设置选项.UseCall错误的

设置最大迭代次数为20。为了减少规则学习过程中的训练错误,可以增加迭代次数。然而,使用过多的迭代会使FIS对训练数据过度调整,增加验证误差。

options.methodoptions.maxItations = 20;

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

RNG('默认'

使用指定的调整数据和选项调整FIS。

使用该规则使用函数大约需要5分钟。对于此示例,通过设置启用调整runtunefis.真正的。加载预先训练的结果而不运行,你可以设置runtunefis.错误的

runtunefis = false;

学习新规则时,参数设置可以为空。有关更多信息,请参阅

如果runtunefis fisout1 = tunefis(fisin,[],trnx,trny,选项);%#OK 别的tunedfis = load('tunedfismpgprediction.mat');fisout1 = tunedfis.fisout1;fprintf('训练RMSE =%.3F mpg \ n',Calculatermse(Fisout1,Trnx,Trny));结尾
训练RMSE = 4.452 MPG

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

查看调谐FIS的结构,Fisout1.

Plotfis(Fisout1)

图包含8个轴。轴1包含2个类型的2个物体。轴2包含2个类型的2个物体。轴3包含2个类型的线。轴4包含2个类型的型号。轴5包含2个类型的类型。轴6包含2个类型的物体。轴7包含64个类型的线路。轴8包含3个类型文本的对象。

学习过程为FIS生成了一套新的规则。例如,查看前3条规则的描述。

[fisout1.rules(1:3).description]'
ans =.3x1字符串"Cylinder==mf2 & Disp==mf2 & Power==mf2 & Weight==mf2 & Year==mf2 => MPG=mf5 (1)"“气缸==mf1 &功率==mf2 &重量==mf2 &加速器==mf2 &年份==mf1 => MPG=mf63(1)”"Cylinder==mf2 & Disp==mf1 & Acceler==mf2 => MPG=mf28 (1)"

对于训练数据集和验证数据集,所学习的系统应该具有相似的RMSE性能。计算验证数据集的均方根误差(RMSE)Fisout1.使用验证输入数据集vldX。要在评估期间隐藏运行时警告,请将所有警告选项设置为没有任何

计算生成的输出数据和验证输出数据集之间的RMSEvldY

plotactualandexpectedresultwithrmse(fisout1,VLDX,VLDY)

图包含2个轴。带标题RMSE = 4.315 MPG的轴1包含3个类型栏的对象。这些对象代表实际的MPG,预期的MPG,最小值和预期值。具有实际和预期值之间标题差异的轴2包含类型栏的对象。

由于培训和验证错误是相似的,因此学习系统不会过度措施。

调整所有参数

在学习新规则之后,调整输入/输出MF参数以及学习规则的参数。要获得FIS的可调参数,请使用gettubalablesstings.功能。

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

在不学习新规则的情况下调整现有的FIS参数设置,请设置优化类型'调整'

选项。OptimizationType ='调整';

由于FIS已经使用训练数据学习规则,使用局部优化方法快速收敛参数值。对于本例,使用模式搜索优化方法('patternsearch')。

options.method =.'patternsearch';

与前一个规则学习步骤相比,优化FIS参数需要更多的迭代。因此,将优化过程的最大迭代次数增加到60次。与第一个调优阶段一样,您可以通过增加迭代的数量来减少训练错误。然而,使用过多的迭代会过度调整训练数据的参数,增加验证错误。

options.MethodOptions.MaxIterations = 60;

要改进模式搜索结果,请设置方法选项USECOMPLETEPOLL.为true。

options.methodoptions.usecompletepoll = true;

使用指定的可调优设置、培训数据和调优选项调优FIS参数。

使用函数大约需要5分钟。加载预先训练的结果而不运行,你可以设置runtunefis.错误的

如果runtunefis rng ('默认'%#OK fisout = tunefis(fisout1,[in; out;规则],trnx,trny,选项);别的fisout = tunedfis.fisout;fprintf('训练RMSE =%.3F mpg \ n',Calculatermse(Fisout,Trnx,Trny));结尾
训练RMSE = 2.903 MPG

在调谐过程结束时,一些调谐的MF形状与原始的。

图plotfis(fisout)

图包含8个轴。轴1包含2个类型的2个物体。轴2包含2个类型的2个物体。轴3包含2个类型的线。轴4包含2个类型的型号。轴5包含2个类型的类型。轴6包含2个类型的物体。轴7包含64个类型的线路。轴8包含3个类型文本的对象。

检查性能

验证调谐FIS的性能,Fisout.,使用验证输入数据集vldX

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

plotactualandexpectresultwithrmse(fisout,vldx,vldy);

图包含2个轴。带标题RMSE = 3.0116 MPG的轴1包含3型栏的3个对象。这些对象代表实际的MPG,预期的MPG,最小值和预期值。具有实际和预期值之间标题差异的轴2包含类型栏的对象。

与初始学习规则库的结果相比,FIS参数的调整提高了均方根误差。因为训练和验证错误是相似的,所以参数值不会被超调。

结论

你可以通过以下方法进一步改善调整后的FIS的训练误差:

  • 在规则学习和参数调整阶段越来越多的迭代次数。这样做会增加优化过程的持续时间,并且还可以增加由于培训数据的过度系统参数而增加了验证错误。

  • 使用全局优化方法,如GA.partminleswarm.,在规则学习和参数调整阶段。GA.partminleswarm.对于大型参数调整范围更好,因为它们是全球优化器。另一方面,PatternSearch.simulannealbnd为小参数范围执行更好,因为它们是本地优化器。如果从培训数据生成FISGenfis.或者使用培训数据将规则库添加到FIS中,然后PatternSearch.simulannealbnd与...相比,可能会产生更快的收敛GA.partminleswarm.。有关这些优化方法及其选项的更多信息,请参阅GA.(全局优化工具箱)partminleswarm.(全局优化工具箱)PatternSearch.(全局优化工具箱),simulannealbnd(全局优化工具箱)

  • 更改FIS属性,如FIS类型、输入数量、输入/输出MF数量、MF类型和规则数量。对于具有大量输入的模糊系统,Sugeno FIS通常比Mamdani FIS收敛更快,因为Sugeno系统具有较少的输出MF参数(如果常数使用MFs)和更快的去模糊。少量的mf和规则减少了要调优的参数数量,从而产生了更快的调优过程。此外,大量的规则可能会导致训练数据过拟合。一般来说,对于较大的模糊系统,一棵FIS树与单一FIS相比,可以用较少的规则产生类似的性能。例如,请参见调整汽油里程预测的FIS树

  • 修改MFS和规则的可调参数设置。例如,您可以调整三角形MF的支持,而无需更改其峰值位置。万博1manbetx这样做减少了可调参数的数量,可以为特定应用程序产生更快的调整过程。对于规则,您可以通过设置来排除零MF索引Quallempty.可调整设置错误的,这减少了学习阶段期间的规则数量。

本地功能

函数plotActualAndExpectedResultsWithRMSE (fis, x, y)%计算RMSE BETWEEN实际和预期结果[RMSE,Acty] = Calculatermse(FIS,X,Y);%绘制结果图形子图(2,1,1)保持酒吧(acty)酒吧(y)酒吧(min(acty,y),'facecholor',[0.5 0.5 0.5])保持轴([0 200 0 60])XLabel(“验证输入数据集索引”),Ylabel(“MPG”) 传奇([“实际的mpg”“预期MPG”“最低实际及期望值”],......“位置”“西北”) 标题(“rmse =”+ num2str(RMSE)+“MPG”subplot(2,1,2) bar(actY-y) xlabel(“验证输入数据集索引”),Ylabel(“错误(MPG)”) 标题(“实际和预期值之间的差异”结尾函数[rmse, actY] = calculateRMSE (fis, x, y)%指定FIS评估选项执着的EvalOptions.如果isempty(EvalOptions)Evaloptions = ExamFisOptions(“extentOutputfuzzysetMessage”“没有”......“norulefiredmessage”“没有”“OutOfRangeInputValueMessage”“没有”);结尾%评估FIS.acty = evalfis(FIS,X,Evaloptions);%计算RMSE.del = acty  -  y;RMSE = SQRT(平均值(del. ^ 2));结尾

也可以看看

||

相关的话题