genfis

Сгенерируйте системный объект нечеткого вывода из данных

Описание

пример

fis = genfis(inputData,outputData) возвращает систему нечеткого вывода (FIS) Sugeno с одним выходом, используя сеточный разбиение заданных входных и выходных данных.

пример

fis = genfis(inputData,outputData,options) возвращает FIS, сгенерированный с использованием заданных входных/выходных данных и options. Можно сгенерировать нечеткие системы с помощью разделения сетки, вычитающей кластеризации или нечеткой кластеризации с-средств (FCM).

Примеры

свернуть все

Определите обучающие данные.

inputData = [rand(10,1) 10*rand(10,1)-5];
outputData = rand(10,1);

Сгенерируйте систему нечеткого вывода.

fis = genfis(inputData,outputData);

Сгенерированная система, fis, создается с использованием разделения сетки с опциями по умолчанию.

Определите обучающие данные.

inputData = [rand(10,1) 10*rand(10,1)-5];
outputData = rand(10,1);

Создайте genfisOptions по умолчанию набор опций для секционирования сетки.

opt = genfisOptions('GridPartition');

Задайте следующие входы функции принадлежности для сгенерированной FIS:

  • 3 Функции Гауссова принадлежности для первой входной переменной

  • 5 треугольные функции членства для второй входной переменной

opt.NumMembershipFunctions = [3 5];
opt.InputMembershipFunctionType = ["gaussmf" "trimf"];

Сгенерируйте FIS.

fis = genfis(inputData,outputData,opt);

Постройте график входа функций принадлежности. Каждый переменный вход имеет заданное количество и тип входа функций принадлежности, равномерно распределенных по их входу областью значений.

[x,mf] = plotmf(fis,'input',1);
subplot(2,1,1)
plot(x,mf)
xlabel('input 1 (gaussmf)')
[x,mf] = plotmf(fis,'input',2);
subplot(2,1,2)
plot(x,mf)
xlabel('input 2 (trimf)')

Figure contains 2 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 5 objects of type line.

Получите входные и выходные обучающие данные.

load clusterdemo.dat
inputData = clusterdemo(:,1:2);
outputData = clusterdemo(:,3);

Создайте genfisOptions набор опций и определение области значений влияния для каждой размерности данных. Задайте 0.5 и 0.25 как область значений влияния для первой и второй входных переменных. Задайте 0.3 как область значений влияния на данные выходы.

opt = genfisOptions('SubtractiveClustering',...
                    'ClusterInfluenceRange',[0.5 0.25 0.3]);

Сгенерируйте FIS.

fis = genfis(inputData,outputData,opt);

Сгенерированный FIS содержит по одному правилу для каждого кластера.

showrule(fis)
ans = 3x83 char array
    '1. If (in1 is in1cluster1) and (in2 is in2cluster1) then (out1 is out1cluster1) (1)'
    '2. If (in1 is in1cluster2) and (in2 is in2cluster2) then (out1 is out1cluster2) (1)'
    '3. If (in1 is in1cluster3) and (in2 is in2cluster3) then (out1 is out1cluster3) (1)'

Получите входные и выходные данные.

load clusterdemo.dat
inputData = clusterdemo(:,1:2);
outputData = clusterdemo(:,3);

Создайте genfisOptions набор опций для кластеризации FCM, задающий тип Mamdani FIS.

opt = genfisOptions('FCMClustering','FISType','mamdani');

Укажите количество кластеров.

opt.NumClusters = 3;

Подавить отображение информации о итерации в Командном окне.

opt.Verbose = 0;

Сгенерируйте FIS.

fis = genfis(inputData,outputData,opt);

Сгенерированный FIS содержит по одному правилу для каждого кластера.

showrule(fis)
ans = 3x83 char array
    '1. If (in1 is in1cluster1) and (in2 is in2cluster1) then (out1 is out1cluster1) (1)'
    '2. If (in1 is in1cluster2) and (in2 is in2cluster2) then (out1 is out1cluster2) (1)'
    '3. If (in1 is in1cluster3) and (in2 is in2cluster3) then (out1 is out1cluster3) (1)'

Постройте график входа и вывода функций принадлежности.

[x,mf] = plotmf(fis,'input',1);
subplot(3,1,1)
plot(x,mf)
xlabel('Membership Functions for Input 1')
[x,mf] = plotmf(fis,'input',2);
subplot(3,1,2)
plot(x,mf)
xlabel('Membership Functions for Input 2')
[x,mf] = plotmf(fis,'output',1);
subplot(3,1,3)
plot(x,mf)
xlabel('Membership Functions for Output')

Figure contains 3 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line. Axes 3 contains 3 objects of type line.

Чтобы создать FIS типа 2 из входных/выходных данных, необходимо сначала создать FIS типа 1 с помощью genfis.

Загрузите обучающие данные и сгенерируйте FIS с помощью вычитающей кластеризации.

load clusterdemo.dat
inputData = clusterdemo(:,1:2);
outputData = clusterdemo(:,3);
opt = genfisOptions('SubtractiveClustering',...
                    'ClusterInfluenceRange',[0.5 0.25 0.3]);
fisT1 = genfis(inputData,outputData,opt);
fisT1.Outputs
ans = 
  fisvar with properties:

                   Name: "out1"
                  Range: [-0.1274 1.1458]
    MembershipFunctions: [1x3 fismf]

Преобразуйте сгенерированный FIS в FIS типа 2.

fisT2 = convertToType2(fisT1);

Поскольку начальный FIS типа 1 является системой Sugeno, только входные MF преобразуются в MF типа 2.

Входные параметры

свернуть все

Входные данные, заданные как N столбец, где N - количество входов FIS.

inputData и outputData должно иметь одинаковое число строк.

Выходные данные, заданные как M столбец, где M - количество выходов FIS.

При использовании сетчатого разбиения, outputData должен иметь один столбец. Если для секционирования сетки задано несколько столбцов, genfis использует первый столбец в качестве выходных данных.

inputData и outputData должно иметь одинаковое число строк.

Опции генерации FIS, заданные как genfisOptions набор опций. Если вы не задаете options, genfis использует набор опций разделения сетки по умолчанию.

Можно сгенерировать нечеткие системы с помощью одного из следующих методов, которые можно задать при создании набора опций:

  • Разделение сетки - Сгенерируйте функции принадлежности входа путем равномерного разбиения входа переменных областей значений и создайте однократно выводимую систему Sugeno fuzzy. Основа нечеткого правила содержит одно правило для каждой комбинации функций принадлежности входа.

    options = genfisOptions('GridPartition');
  • Вычитающая кластеризация - Сгенерируйте нечеткую систему Sugeno с помощью функций принадлежности и правил, выведенных из кластеров данных, найденных с помощью вычитающей кластеризации входных и выходных данных. Для получения дополнительной информации о вычитании кластеризации см. subclust.

    options = genfisOptions('SubtractiveClustering');
  • Кластеризация FCM - Сгенерируйте нечеткую систему с помощью функции принадлежности и правил, полученных из кластеров данных, найденных с помощью кластеризации FCM входных и выходных данных. Для получения дополнительной информации о кластеризации FCM см. fcm.

    options = genfisOptions('FCMClustering');

Выходные аргументы

свернуть все

Система нечеткого вывода, возвращенная как a mamfis или sugfis объект. Свойства fis зависят от типа используемой кластеризации и соответствующих options.

Тип кластеризацииНечеткий тип системыВходные функции членстваНечеткие правилаВыходы членства
Разделение сетки на разделыSugenoКаждый переменный вход имеет равномерно распределенную функцию входа принадлежности. Укажите количество функций членства, использующих options.NumMembershipFunctions. Укажите тип функции принадлежности с помощью options.InputMembershipFunctionType.Одно правило для каждой комбинации функций членства в входе. Последствие каждого правила соответствует отдельной функции выхода принадлежности.Один выход для каждого нечеткого правила. Укажите тип функции принадлежности с помощью options.OutputMembershipFunctionType.
Вычитание кластеризацииSugenoКаждая входная переменная имеет одну 'gaussmf' входная функция для каждого нечеткого кластера.Одно правило для каждого нечеткого кластераКаждая выходная переменная имеет одну 'linear' выходная функция принадлежности для каждого нечеткого кластера.
Кластеризация FCMМамдани или СугеноКаждая входная переменная имеет одну 'gaussmf' входная функция для каждого нечеткого кластера.Одно правило для каждого нечеткого кластераКаждый переменный выход имеет одну функцию выхода принадлежности для каждого нечеткого кластера. Тип функции принадлежности 'gaussmf' для систем и 'linear' Mamdani для систем Sugeno.

Если fis является системой Sugeno с одним выходом, можно настроить параметры функции принадлежности с помощью anfis функция.

Генерация FIS типа 2 не поддерживается genfis. Вместо этого сгенерируйте FIS типа 1 и преобразуйте его с помощью convertToType2 функция.

Вопросы совместимости

расширить все

Предупреждает, начиная с R2019b

См. также

| | |

Введенный в R2017a