_白也 2023-10-13 16:47 采纳率: 50%
浏览 11

MATLAB的genfis1训练问题

我在使用MATLAB进行模糊控制系统测试的时候,发现genfis1产生的fis文件在未训练时,通过evalfis函数的输出为0,这是为什么呢,我理解的是genfis1产生的应该是初始模糊系统,即使拟合程度较低,但也不应该全是0

img

% 生成训练数据
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');
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-13 19:25
    关注

    【以下回答由 GPT 生成】

    问题原因分析:

    根据您提供的代码,可能导致genfis1函数产生未经过训练的fis文件,并且evalfis函数的输出全部为0的原因有以下几个可能性:

    1. 数据分布不适合建立模糊推理系统: genfis1函数根据输入数据生成模糊推理系统,如果数据集的分布不适合进行模糊推理,可能导致生成的fis文件无法正确拟合数据,从而evalfis函数的输出为0。

    2. 隶属度函数配置不正确: genfis1函数中的隶属度函数参数可能没有正确配置,导致模糊推理系统无法正确拟合数据,输出为0。请确保mfType参数正确设置为'gbellmf'。

    3. 训练次数不足: genfis1函数根据数据进行模糊推理系统的训练,默认的训练方式为基于聚类的最大期望算法,可能需要增加训练次数以提高拟合度。可以通过增加训练迭代次数来提高拟合结果。可以通过更改训练选项来实现,例如使用genfis2函数,并通过设定'NumClusters'和'EpochNumber'参数来让模型进行更多次的聚类和训练。

    解决方案:

    针对上述可能导致的原因,以下是解决方案的具体步骤:

    1. 检查数据分布是否适合模糊推理: 可以通过绘制输入数据和实际输出之间的关系图来查看数据分布情况。如果数据分布不适合模糊推理,可以尝试使用其他的机器学习方法或者调整输入数据。

    2. 检查隶属度函数配置: 确保mfType参数正确配置为'gbellmf',这是常用的模糊隶属度函数类型之一。可以尝试使用其他类型的隶属度函数来看是否影响结果。

    3. 增加训练次数: 可以尝试使用genfis2函数替代genfis1,通过设定'NumClusters'和'EpochNumber'参数来增加训练次数。增加训练次数可以提高拟合度,从而解决输出为0的问题。

    以下是调整后的代码示例:

    % 生成训练数据
    data = [rand(100,1) 10*rand(100,1)-5 rand(100,1)];
    % 设置隶属度函数个数和类型
    numMFs = [3 5];
    mfType = 'gbellmf';
    % 生成模糊推理系统
    fis = genfis2(data(:,1:2), data(:,3), 'gbellmf', numMFs);
    % 提取输入数据和实际输出
    inputs = data(:, 1:2);
    actualOutput = data(:, 3);
    % 训练模糊推理系统
    epochNum = 100; % 增加训练次数
    opt = anfisOptions('EpochNumber', epochNum);
    fismat = anfis(data, fis, opt);
    % 计算模糊输出
    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');
    

    通过以上步骤,您可以调整genfis1函数的使用方式和参数配置,以解决genfis1函数未经训练时evalfis函数输出全部为0的问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 10月13日

悬赏问题

  • ¥15 Arduino电机和openmv连接异常
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询