You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中genfis1生成未训练FIS输出全0的原因及训练差异问询

问题分析与解答

核心问题

测试MATLAB中genfis1生成的FIS时,发现未训练的FIS输出全为0,但训练后拟合效果良好。疑惑是代码问题还是MATLAB特性,同时想了解FIS训练前后的差异。

代码问题定位

你提供的代码里存在变量大小写不一致的关键错误:

  • 生成数据时用的是Data,但后续调用genfis1、提取输入输出时用的是data(MATLAB区分大小写),这会导致data未定义,MATLAB会默认使用异常值,最终引发输出全0的问题。
  • 括号冗余不影响运行,但变量名错误是核心诱因。

修正后的代码:

% 生成训练数据
Data = [rand(100, 1) 10 * rand(100, 1) - 5 rand(100, 1)];

% 设置隶属函数数量与类型
numMFs = [3 5];
mfType = 'gbellmf';

% 生成模糊推理系统(统一变量名)
fismat = genfis1(Data, numMFs, mfType);

% 提取输入数据与实际输出(统一变量名)
inputs = Data(:, 1:2);
actualOutput = Data(:, 3);

% 计算模糊输出
fisOutput = evalfis(inputs, fismat);

% 绘制模糊输出与实际输出对比图
scatter3(inputs(:, 1), inputs(:, 2), actualOutput, 'filled', 'MarkerFaceColor', 'b');
hold on;
scatter3(inputs(:, 1), inputs(:, 2), fisOutput, 'filled', 'MarkerFaceColor', 'r');
xlabel('Input 1');
ylabel('Input 2');
zlabel('Output');
legend('Actual Output', 'Fuzzy System Output');

训练前后FIS的差异

未训练的FIS(genfis1生成)

  • genfis1会根据输入数据分布自动生成隶属函数的初始参数,但输出层的初始规则结论参数默认设为0,这是MATLAB的设计特性——初始状态下未学习到输入输出的映射关系,所以输出会偏向0。但代码正确时,不会全为0,而是基于初始隶属函数的模糊推理结果,只是拟合精度极低。
  • 结构上:已具备完整的模糊规则框架(输入隶属函数、规则数量、输出结构),但所有参数未经过优化。

训练后的FIS(ANFIS训练)

  • ANFIS通过反向传播+最小二乘法的混合算法,优化两类核心参数:
    1. 输入隶属函数的形状参数(如钟形函数的中心、宽度等),让隶属函数更贴合数据分布;
    2. 输出层的规则结论参数,建立输入到输出的精准映射关系。
  • 最终输出会紧密贴合训练数据的实际值,拟合精度大幅提升。

总结

你遇到的输出全0是代码变量名错误导致的,而非MATLAB特性。修正变量名后,未训练的FIS会输出基于初始隶属函数的推理结果(不会全0),只是精度远低于训练后的FIS。

内容的提问来源于stack exchange,提问作者Lixiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 20:37:47