exponenta event banner

genfis

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

Описание

пример

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

пример

fis = genfis(inputData,outputData,options) возвращает FIS, сгенерированный с использованием указанных входных/выходных данных и options. Нечеткие системы можно создавать с помощью секционирования сетки, вычитания кластеризации или нечеткого c-means (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, указывающий тип FIS Mamdani.

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 является системой Сугено, только входные MF преобразуются в MF типа 2.

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

свернуть все

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

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

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

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

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

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

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

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

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

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

    options = genfisOptions('FCMClustering');

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

свернуть все

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

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

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

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

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

развернуть все

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

См. также

| | |

Представлен в R2017a