exponenta event banner

anfis

Настройка системы нечеткого вывода типа Sugeno с использованием обучающих данных

Описание

пример

fis = anfis(trainingData) генерирует систему нечеткого вывода (FIS) Sugeno с одним выходом и настраивает параметры системы с использованием заданных входных/выходных обучающих данных. Объект FIS автоматически создается с помощью секционирования сетки.

Алгоритм обучения использует комбинацию методов наименьших квадратов и обратного градиентного спуска для моделирования набора обучающих данных.

пример

fis = anfis(trainingData,options) настраивает FIS с использованием указанных учебных данных и вариантов. С помощью этого синтаксиса можно указать:

  • Начальный объект FIS для настройки.

  • Данные проверки для предотвращения подгонки к данным обучения.

  • Варианты алгоритма обучения.

  • Отображать ли информацию о ходе обучения.

пример

[fis,trainError] = anfis(___) возвращает среднеквадратическую ошибку обучения для каждого периода обучения.

пример

[fis,trainError,stepSize] = anfis(___) возвращает размер шага обучения в каждую эпоху обучения.

пример

[fis,trainError,stepSize,chkFIS,chkError] = anfis(trainingData,options) возвращает ошибку данных проверки для каждого периода обучения, chkErrorи настроенный объект FIS, для которого ошибка проверки является минимальной, chkFIS. Чтобы использовать этот синтаксис, необходимо указать данные проверки с помощью options.ValidationData.

Примеры

свернуть все

Загрузить данные обучения. Эти данные имеют один вход и один выход.

load fuzex1trnData.dat

Создание и обучение системы нечеткого вывода. По умолчанию структура FIS создается с использованием грид-секции диапазона входных переменных с двумя функциями членства.

fis = anfis(fuzex1trnData);
ANFIS info:
	Number of nodes: 12
	Number of linear parameters: 4
	Number of nonlinear parameters: 6
	Total number of parameters: 10
	Number of training data pairs: 25
	Number of checking data pairs: 0
	Number of fuzzy rules: 2


Start training ANFIS ...

1 	 0.229709
2 	 0.22896
3 	 0.228265
4 	 0.227624
Step size increases to 0.011000 after epoch 5.
5 	 0.227036
6 	 0.2265
7 	 0.225968
8 	 0.225488
Step size increases to 0.012100 after epoch 9.
9 	 0.225052
10 	 0.22465

Designated epoch number reached. ANFIS training completed at epoch 10.

Minimal training RMSE = 0.22465

Постройте график выходных и учебных данных ANFIS.

x = fuzex1trnData(:,1);
anfisOutput = evalfis(fis,x);
plot(x,fuzex1trnData(:,2),'*r',x,anfisOutput,'.b')
legend('Training Data','ANFIS Output','Location','NorthWest')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Training Data, ANFIS Output.

Данные ANFIS плохо совпадают с данными обучения. Для улучшения соответствия:

  • Увеличение числа членских функций в структуре FIS до 4. При этом в систему добавляются нечеткие правила и настраиваемые параметры.

  • Увеличить количество периодов обучения.

opt = anfisOptions('InitialFIS',4,'EpochNumber',40);

Подавление отображения командного окна с размером ошибки и шага.

opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;

Обучение FIS.

fis = anfis(fuzex1trnData,opt);
ANFIS info:
	Number of nodes: 20
	Number of linear parameters: 8
	Number of nonlinear parameters: 12
	Total number of parameters: 20
	Number of training data pairs: 25
	Number of checking data pairs: 0
	Number of fuzzy rules: 4

Minimal training RMSE = 0.0833853

Постройте график выходных и учебных данных ANFIS.

figure
anfisOutput = evalfis(fis,x);
plot(x,fuzex1trnData(:,2),'*r',x,anfisOutput,'.b')
legend('Training Data','ANFIS Output','Location','NorthWest')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Training Data, ANFIS Output.

Улучшилось соответствие между данными обучения и результатами АНФИС.

Создание учебных данных с одним входом и одним выходом.

x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);

Определите начальную структуру FIS с пятью гауссовыми входными членскими функциями.

genOpt = genfisOptions('GridPartition');
genOpt.NumMembershipFunctions = 5;
genOpt.InputMembershipFunctionType = 'gaussmf';
inFIS = genfis(x,y,genOpt);

Настройте параметры обучения ANFIS. Установите начальный FIS и подавите отображение хода обучения.

opt = anfisOptions('InitialFIS',inFIS);
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;

Обучение FIS с использованием указанных опций.

outFIS = anfis([x y],opt);

Сравните выходные данные ANFIS с данными обучения.

plot(x,y,x,evalfis(outFIS,x))
legend('Training Data','ANFIS Output')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Training Data, ANFIS Output.

Загрузить данные обучения. Эти данные имеют один вход и один выход.

load fuzex2trnData.dat

Укажите параметры обучения.

opt = anfisOptions('InitialFIS',4,'EpochNumber',40);
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;

Обучите FIS и верните ошибку обучения.

[fis,trainError] = anfis(fuzex2trnData,opt);

trainError содержит корневую среднеквадратичную ошибку для данных обучения в каждую эпоху обучения. Ошибка обучения для fis - минимальное значение в trainError.

fisRMSE = min(trainError)
fisRMSE = 0.2572

Создание учебных данных с одним входом и одним выходом.

x = (0:0.1:10)';
y = sin(2*x)./exp(x/5);

Настройте параметры обучения ANFIS. Установите начальный FIS и подавите отображение хода обучения.

opt = anfisOptions('InitialFIS',4,'EpochNumber',60);
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;

Увеличение размера шага может ускорить процесс обучения. Однако слишком большая скорость увеличения размера шага может привести к плохой сходимости. В этом примере попробуйте удвоить скорость увеличения размера шага.

opt.StepSizeIncreaseRate = 2*opt.StepSizeIncreaseRate;

Выполните обучение FIS и верните массив размера шага.

[fis,~,stepSize] = anfis([x y],opt);

Постройте график профиля размера шага. Оптимальный профиль размера шага должен увеличиваться изначально, достигать максимума, а затем уменьшаться для остальной части тренировки.

figure
plot(stepSize)

Figure contains an axes. The axes contains an object of type line.

Загрузить данные обучения.

load fuzex1trnData.dat

Загрузить данные проверки.

load fuzex1chkData.dat

Укажите следующие параметры обучения:

  • 4 входные функции членства

  • 30 учебные эпохи

  • Подавление отображения хода обучения

opt = anfisOptions('InitialFIS',4,'EpochNumber',30);
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;

Добавьте данные проверки в параметры обучения.

opt.ValidationData = fuzex1chkData;

Обучите FIS и верните результаты проверки.

[fis,trainError,stepSize,chkFIS,chkError] = anfis(fuzex1trnData,opt);

Ошибка обучения, trainErrorи ошибка проверки, chkError, каждый массив содержит одно значение ошибки на тренировочную эпоху. Постройте график ошибки обучения и ошибки проверки.

x = [1:30];
plot(x,trainError,'.b',x,chkError,'*r')

Figure contains an axes. The axes contains 2 objects of type line.

Минимальная ошибка проверки имеет место в период 17. Увеличение погрешности проверки после этого момента указывает на подгонку параметров модели к учебным данным. Поэтому настроенная FIS в эпоху 17, chkFIS, демонстрирует лучшие обобщающие показатели.

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

свернуть все

Данные обучения, указанные как массив. Для нечеткой системы с N входами укажите trainingData как массив с N + 1 столбцами. Первые N столбцов содержат входные данные, а последний столбец содержит выходные данные. Каждая строка trainingData содержит одну точку данных.

Как правило, учебные данные должны в полной мере отражать характеристики данных, которые должна моделировать FIS.

Варианты обучения, указанные как anfisOptions набор опций. Используя options, можно указать:

  • Первоначальная структура FIS для настройки, options.InitialFIS.

  • Данные проверки для предотвращения подгонки к данным обучения, options.ValidationData.

  • Варианты алгоритма обучения, такие как максимальное количество периодов обучения, options.EpochNumberили цель ошибки обучения, options.ErrorGoal.

  • Отображать ли информацию о ходе обучения, например, значения ошибок обучения для каждой эпохи обучения, options.DisplayErrorValues.

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

свернуть все

Обученная система нечеткого вывода с параметрами функции членства, настроенными с использованием данных обучения, возвращенных в качестве mamfis или sugfis объект. Эта нечеткая система соответствует эпохе, для которой ошибка обучения является наименьшей. Если две эпохи имеют одинаковую минимальную ошибку обучения, возвращается FIS из предыдущей эпохи.

Среднеквадратическая ошибка обучения для каждой эпохи обучения, возвращаемая в виде массива. Минимальное значение в trainError - ошибка обучения для нечеткой системы fis.

Размер шага обучения для каждой эпохи, возвращаемый в виде массива. anfis алгоритм обучения настраивает параметры FIS методами оптимизации градиентного спуска. Размер шага обучения - это величина градиентных переходов в пространстве параметров.

В идеале размер шага увеличивается в начале тренировки, достигает максимума, а затем уменьшается на оставшуюся часть тренировки. Чтобы получить этот профиль размера шага, отрегулируйте начальный размер шага (options.InitialStepSize), скорость увеличения размера шага (options.StepSizeIncreaseRate) и скорость уменьшения размера шага options.StepSizeDecreaseRate.

Настроенная FIS, для которой ошибка проверки является минимальной, возвращается как mamfis или sugfis объект. Если две эпохи имеют одинаковую минимальную ошибку проверки, возвращается FIS из предыдущей эпохи.

chkFIS возвращается только при указании данных проверки с помощью options.ValidationData.

Среднеквадратическая ошибка обучения, возвращаемая в виде массива с длиной, равной числу периодов обучения. Минимальное значение в chkError - ошибка обучения для нечеткой системы chkFIS.

chkError возвращается только при указании данных проверки с помощью options.ValidationData.

Альтернативная функциональность

tunefis Функция

Начиная с R2019a, можно настроить нечеткую систему с помощью tunefis. Эта функция предоставляет несколько других опций для настройки алгоритмов, определенных tunefisOptions объект.

Для использования ANFIS укажите алгоритм настройки как "anfis" в tunefisOptions. Затем используйте объект options в качестве входного аргумента для tunefis. Например:

Создайте начальную систему нечеткого вывода и определите настраиваемые параметры.

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".

opt = tunefisOptions("Method","anfis");
fisout = tunefis(fisin,[in;out],x,y,opt);

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

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

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

Ссылки

[1] Чан, Ж.-С. Р., «Нечеткое моделирование с использованием обобщенных нейронных сетей и алгоритма фильтра Калмана», Proc. девятого Национального совещания по искусственному интеллекту (AAAI-91). июль 1991, стр. 762-767.

[2] Чан, Ж.-С. R., «ANFIS: адаптивные сетевые системы нечеткого вывода», IEEE Transactions on Systems, Man, and Cybernetics, Vol. 23, No. 3, May 1993, pp. 665-685.

Представлен до R2006a