34、模糊推理系统的调优与相关操作

模糊推理系统的调优与相关操作

1. tunefis 函数介绍

1.1 语法

  • fisout = tunefis(fisin,paramset,in,out) :使用 paramset 中指定的可调参数设置以及 in out 指定的训练数据来调整模糊推理系统 fisin
  • fisout = tunefis(fisin,paramset,custcostfcn) :使用自定义成本函数句柄 custcostfcn 来调整模糊推理系统。
  • fisout = tunefis( ___ ,options) :使用 tunefisOptions 创建的对象 options 中的附加选项来调整模糊推理系统。
  • [fisout,summary] = tunefis( ___ ) :调整模糊推理系统,并在 summary 中返回有关调整算法的附加信息。

1.2 输入参数

参数 说明
fisin 模糊推理系统,可以是 mamfis 对象、 sugfis 对象、 mamfistype2 对象、 sugfistype2 对象或 fistree 对象
paramset 可调参数设置,通过 getTunableSettings 函数从 fisin 中获取的输入、输出和规则参数设置的数组
in 输入训练数据,为 m-by-n 矩阵, m 是输入数据集的总数, n 是输入的数量
out 输出训练数据,为 m-by-q 矩阵, m 是输出数据集的总数, q 是输出的数量
options FIS 调整选项,为 tunefisOptions 对象
custcostfcn 自定义成本函数,为函数句柄

1.3 输出参数

参数 说明
fisout 调整后的模糊推理系统,与 fisin 类型相同
summary 调整算法的摘要,包含 tuningOutputs totalFunctionCount totalRuntime errorMessage 等字段

1.4 示例

1.4.1 调整模糊推理系统
% 创建初始模糊推理系统
x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);
options = genfisOptions('GridPartition');
options.NumMembershipFunctions = 5;
fisin = genfis(x,y,options);

% 获取模糊推理系统的输入、输出和规则的可调设置
[in,out,rule] = getTunableSettings(fisin);

% 使用 “anfis” 调整隶属度函数参数
fisout = tunefis(fisin,[in;out],x,y,tunefisOptions("Method","anfis"));
1.4.2 调整模糊推理系统的特定参数设置
% 创建初始模糊推理系统
x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);
options = genfisOptions('GridPartition');
options.NumMembershipFunctions = 5;
fisin = genfis(x,y,options);

% 获取模糊推理系统的输入、输出和规则的可调设置
[in,out,rule] = getTunableSettings(fisin);

% 仅调整规则参数,使用模式搜索方法
fisout = tunefis(fisin,rule,x,y,tunefisOptions("Method","patternsearch"));
1.4.3 使用自定义参数设置调整模糊推理系统
% 创建初始模糊推理系统
x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);
options = genfisOptions('GridPartition');
options.NumMembershipFunctions = 5;
fisin = genfis(x,y,options);

% 获取模糊推理系统的输入、输出和规则的可调设置
[in,out,rule] = getTunableSettings(fisin);

% 自定义参数设置
in(1) = setTunable(in(1),false);
out(1).MembershipFunctions(1:2) = setTunable(out(1).MembershipFunctions(1:2),false);
out(1).MembershipFunctions(3).Parameters.Free = false;
out(1).MembershipFunctions(4).Parameters.Minimum = -2;
out(1).MembershipFunctions(5).Parameters.Maximum = 2;
rule(1:2) = setTunable(rule(1:2),false);
rule(3).Antecedent.Free = false;
rule(4).Antecedent.AllowNot = true;
rule(3).Consequent.AllowEmpty = false;

% 设置最大迭代次数为 20 并调整模糊推理系统
opt = tunefisOptions("Method","particleswarm");
opt.MethodOptions.MaxIterations = 20;
fisout = tunefis(fisin,[in;out;rule],x,y,opt);
1.4.4 使用 K 折交叉验证防止过拟合
% 加载训练数据
load fuzex1trnData.dat
inputData = fuzex1trnData(:,1);
outputData = fuzex1trnData(:,2);

% 创建模糊推理系统
opt = genfisOptions('GridPartition');
opt.NumMembershipFunctions = 4;
opt.InputMembershipFunctionType = "gaussmf";
fis = genfis(inputData,outputData,opt);

% 设置随机数生成器种子
rng('default')

% 配置 FIS 调整选项
tuningOpt = tunefisOptions;
tuningOpt.MethodOptions.MaxGenerations = 30;
tuningOpt.KFoldValue = 3;
tuningOpt.ValidationWindowSize = 2;
tuningOpt.ValidationTolerance = 0.05;

% 获取 FIS 隶属度函数参数的可调设置
[in,out] = getTunableSettings(fis);

% 调整 FIS
[outputFIS,info] = tunefis(fis,[in;out],inputData,outputData,tuningOpt);

% 评估调整后的 FIS
outputTuned = evalfis(outputFIS,inputData);

% 绘制输出结果
plot([outputData,outputTuned])
legend("Expected Output","Tuned Output","Location","southeast")
xlabel("Data Index")
ylabel("Output value")

1.5 流程图

graph TD;
    A[创建初始模糊推理系统] --> B[获取可调设置];
    B --> C{选择调整方法};
    C -- anfis --> D[使用 anfis 调整];
    C -- patternsearch --> E[使用 patternsearch 调整];
    C -- particleswarm --> F[使用 particleswarm 调整];
    D --> G[输出调整后的 FIS];
    E --> G;
    F --> G;

2. update 函数介绍

2.1 语法

ruleOut = update(ruleIn,fis) :使用模糊推理系统 fis 中的信息更新模糊规则 ruleIn ,并在 ruleOut 中返回结果模糊规则。

2.2 输入参数

参数 说明
ruleIn 模糊规则,可以是 fisrule 对象或 fisrule 对象的数组
fis 模糊推理系统,可以是 mamfis 对象、 sugfis 对象、 mamfistype2 对象或 sugfistype2 对象

2.3 输出参数

参数 说明
ruleOut 模糊规则,为 fisrule 对象或 fisrule 对象的数组

2.4 示例

2.4.1 使用文本描述创建模糊规则
% 使用详细文本描述创建模糊规则
rule = fisrule("if service is poor and food is delicious then tip is average (1)");

% 或者使用符号文本描述指定相同的规则
rule = fisrule("service==poor & food==delicious => tip=average")

% 在使用规则之前,使用 update 函数更新规则的 Antecedent 和 Consequent 属性
fis = readfis("tipper");
rule = update(rule,fis)
2.4.2 使用数字描述创建模糊规则
% 使用数字描述创建模糊规则
rule = fisrule([1 2 2 0.5 1],2)

% 在使用规则之前,使用 update 函数更新规则的 Description 属性
fis = readfis("tipper");
rule = update(rule,fis)

3. writeFIS 函数介绍

3.1 语法

  • writeFIS(fis,fileName) :将模糊推理系统 fis 保存到当前工作文件夹中,使用文件名 fileName
  • writeFIS(fis) :打开一个对话框,用于保存 FIS。在对话框中,指定 .fis 文件的名称和位置。
  • writeFIS(fis,fileName,"dialog") :打开一个对话框,用于保存 FIS,将对话框中的文件名设置为 fileName 。在对话框中,指定文件的位置。

3.2 输入参数

参数 说明
fis 模糊推理系统,可以是 mamfis 对象、 sugfis 对象、 mamfistype2 对象或 sugfistype2 对象
fileName 文件名,为字符串或字符向量。如果未在文件名中指定 .fis 扩展名, writeFIS 会添加该扩展名

3.3 示例

% 创建模糊推理系统
fis = mamfis('Name','tipper');
fis = addInput(fis,[0 10],'Name','service');
fis = addMF(fis,'service','gaussmf',[1.5 0],'Name','poor');
fis = addMF(fis,'service','gaussmf',[1.5 5],'Name','good');
fis = addMF(fis,'service','gaussmf',[1.5 10],'Name','excellent');

% 保存模糊系统到文件
writeFIS(fis,'myFile');

4. zmf 函数介绍

4.1 语法

y = zmf(x,params) :使用基于样条的 Z 形隶属度函数计算模糊隶属度值。

4.2 输入参数

参数 说明
x 输入值,可以是标量或向量
params 隶属度函数参数,为长度为 2 的向量 [a b]

4.3 输出参数

参数 说明
y 隶属度值,为标量或向量,其维度与 x 相同

4.4 示例

% 指定输入值
x = 0:0.1:10;

% 计算隶属度函数值
y = zmf(x,[3 7]);

% 绘制隶属度函数
plot(x,y)
title('zmf, P = [3 7]')
xlabel('x')
ylabel('Degree of Membership')
ylim([-0.05 1.05])

4.5 替代功能

可以使用 fismf 对象来创建和评估实现 zmf 隶属度函数的对象。

mf = fismf("zmf",P);
Y = evalmf(mf,X);

5. anfisOptions 对象介绍

5.1 描述

使用 anfisOptions 对象为 anfis 函数指定调整模糊系统的选项,例如要调整的初始 FIS 结构和训练周期数。

5.2 创建语法

  • opt = anfisOptions :创建用于使用 anfis 调整 Sugeno 模糊推理系统的默认选项集。
  • opt = anfisOptions(Name,Value) :使用一个或多个名称 - 值参数设置属性。

5.3 属性

属性 说明 默认值
InitialFIS 要调整的初始 FIS 结构,可以是大于 1 的正整数、正整数向量或 FIS 结构 2
EpochNumber 最大训练周期数 10
ErrorGoal 训练误差目标 0
InitialStepSize 初始训练步长 0.01
StepSizeDecreaseRate 步长减小率 0.9
StepSizeIncreaseRate 步长增加率 1.1
DisplayANFISInformation 显示 ANFIS 信息的标志 1
DisplayErrorValues 显示训练误差值的标志 1
DisplayStepSize 显示步长的标志 1
DisplayFinalResults 显示最终结果的标志 1
ValidationData 用于防止过拟合到训练数据的验证数据 []
OptimizationMethod 隶属度函数参数训练中使用的优化方法 1

5.4 示例

% 创建默认选项集
opt = anfisOptions;

% 使用点表示法指定训练选项
opt.InitialFIS = 4;
opt.EpochNumber = 30;

% 或者在创建选项集时使用名称 - 值对参数指定选项
opt2 = anfisOptions('InitialFIS',4,'EpochNumber',30);

6. 各函数与对象的综合应用分析

6.1 函数与对象之间的关联

在模糊推理系统的构建和调整过程中, tunefis update writeFIS zmf 函数以及 anfisOptions 对象相互协作,共同完成模糊系统的设计、优化和保存等任务。以下是它们之间的关联分析:
- tunefis anfisOptions tunefis 函数用于调整模糊推理系统,而 anfisOptions 对象可以为 anfis 方法提供详细的调整选项。例如,在使用 tunefis 函数时,可以通过 tunefisOptions 对象设置训练周期数、初始步长等参数,从而更精确地控制调整过程。
- update tunefis update 函数用于更新模糊规则,确保规则的 Antecedent Consequent 属性与模糊推理系统中的隶属度函数相匹配。在使用 tunefis 调整模糊系统之前,可能需要使用 update 函数对规则进行更新,以保证规则的正确性。
- writeFIS 与其他函数 writeFIS 函数用于将调整好的模糊推理系统保存到文件中。在使用 tunefis 调整系统后,可以使用 writeFIS 函数将结果保存,以便后续使用或分享。
- zmf 与模糊系统构建 zmf 函数用于计算 Z 形隶属度函数的值,是构建模糊推理系统中隶属度函数的重要工具。在创建模糊推理系统时,可以使用 zmf 函数定义输入和输出变量的隶属度函数。

6.2 综合应用示例

以下是一个综合应用上述函数和对象的示例,展示了如何从创建模糊推理系统到调整、保存的完整过程:

% 1. 创建初始模糊推理系统
x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);
options = genfisOptions('GridPartition');
options.NumMembershipFunctions = 5;
fisin = genfis(x,y,options);

% 2. 获取可调设置
[in,out,rule] = getTunableSettings(fisin);

% 3. 自定义参数设置
in(1) = setTunable(in(1),false);
out(1).MembershipFunctions(1:2) = setTunable(out(1).MembershipFunctions(1:2),false);
out(1).MembershipFunctions(3).Parameters.Free = false;
out(1).MembershipFunctions(4).Parameters.Minimum = -2;
out(1).MembershipFunctions(5).Parameters.Maximum = 2;
rule(1:2) = setTunable(rule(1:2),false);
rule(3).Antecedent.Free = false;
rule(4).Antecedent.AllowNot = true;
rule(3).Consequent.AllowEmpty = false;

% 4. 配置调整选项
opt = tunefisOptions("Method","particleswarm");
opt.MethodOptions.MaxIterations = 20;

% 5. 调整模糊推理系统
fisout = tunefis(fisin,[in;out;rule],x,y,opt);

% 6. 保存调整后的模糊推理系统
writeFIS(fisout,'adjustedFIS');

6.3 流程图

graph TD;
    A[创建初始模糊推理系统] --> B[获取可调设置];
    B --> C[自定义参数设置];
    C --> D[配置调整选项];
    D --> E[调整模糊推理系统];
    E --> F[保存调整后的系统];

7. 注意事项和常见问题解答

7.1 注意事项

  • 文件操作 :在使用 writeFIS 函数保存模糊推理系统时,不要手动编辑 .fis 文件的内容,否则可能会导致在使用 readfis 等函数加载文件时出现意外结果。
  • 对象和结构的兼容性 :从 R2019b 开始,逐渐移除对将模糊推理系统表示为结构的支持,建议使用 mamfis sugfis 对象。如果需要将现有的模糊推理系统结构转换为对象,可以使用 convertfis 函数。
  • 随机数生成器 :在使用 K 折交叉验证等需要随机划分数据的方法时,建议设置随机数生成器的种子,以保证结果的可重复性。

7.2 常见问题解答

  • 问题 1:如何选择合适的调整方法?
    • 解答:不同的调整方法适用于不同的场景。例如, anfis 方法适用于调整 Sugeno 型模糊推理系统,它结合了反向传播和最小二乘法估计; patternsearch 方法适用于搜索特定参数的最优值; particleswarm 方法适用于全局优化问题。可以根据具体问题和数据特点选择合适的方法。
  • 问题 2:如果在调整过程中出现误差过大的情况怎么办?
    • 解答:可以尝试调整 anfisOptions 对象中的参数,如增加训练周期数、调整初始步长等。也可以检查输入数据是否存在异常值,或者尝试使用不同的隶属度函数。
  • 问题 3:如何确保模糊规则的正确性?
    • 解答:在使用模糊规则之前,使用 update 函数对规则进行更新,确保规则的 Antecedent Consequent 属性与模糊推理系统中的隶属度函数相匹配。同时,在创建规则时,要仔细检查规则的逻辑是否合理。

8. 总结

本文详细介绍了模糊推理系统相关的函数和对象,包括 tunefis update writeFIS zmf 函数以及 anfisOptions 对象。通过具体的示例和操作步骤,展示了如何创建、调整和保存模糊推理系统,以及如何使用 K 折交叉验证防止过拟合。同时,分析了各函数和对象之间的关联和综合应用方法,并给出了注意事项和常见问题解答。希望本文能够帮助读者更好地理解和应用模糊推理系统,解决实际问题。

在实际应用中,读者可以根据具体需求选择合适的函数和方法,灵活调整参数,以达到最佳的效果。同时,不断探索和尝试新的方法和技巧,提高模糊推理系统的性能和准确性。

内容概要:本文介绍了一套针对智能穿戴设备的跑步/骑行轨迹记录系统实战方案,旨在解决传统运动APP存在的定位漂移、数据断层和路径分析单一等问题。系统基于北斗+GPS双模定位、惯性测量单元(IMU)和海拔传感器,实现高精度轨迹采集,并通过卡尔曼滤波算法修正定位误差,在信号弱环境下利用惯性导航补位,确保轨迹连续性。系统支持跑步骑行两种场景的差异化功能,包括实时轨迹记录、多维度路径分析(如配速、坡度、能耗)、数据可视化(地图标注、曲线图、3D回放)、异常提醒及智能化建议,并可通过蓝牙/Wi-Fi同步数据至手机APP,支持社交分享专业软件导出。技术架构涵盖硬件层、设备端手机端软件层以及云端数据存储,强低功耗设计用户体验化。经过实测验证,系统在定位精度、续航能力和场景识别准确率方面均达到预期指标,具备良好的实用性和扩展性。; 适合人群:具备一定嵌入式开发或移动应用开发经验,熟悉物联网、传感器融合数据可视化的技术人员,尤其是从事智能穿戴设备、运动健康类产品研发的工程师和产品经理;也适合高校相关专业学生作为项目实践参考。; 使用场景及目标:① 开发高精度运动轨迹记录功能,解决GPS漂移断点问题;② 实现跑步骑行场景下的差异化数据分析个性化反馈;③ 构建完整的“终端采集-手机展示-云端存储”系统闭环,支持社交互动商业拓展;④ 掌握低功耗化、多源数据融合、动态功耗节等关键技术在穿戴设备中的落地应用。; 阅读建议:此资源以真实项目为导向,不仅提供详细的技术实现路径,还包含硬件选型、测试验证商业扩展思路,建议读者结合自身开发环境,逐步实现各模块功能,重点关注定位化算法、功耗控制策略跨平台数据同步机制的设计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值