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 object. The axes object 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 object. The axes object contains 2 objects of type line. These objects represent Training Data, ANFIS Output.

Соответствие между обучающими данными и ANFIS выход улучшилось.

Создайте одно вход, обучающие данные одно выхода.

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

Задайте начальную структуру FIS с пятью функциями принадлежности входа Gaussian.

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 object. The axes object 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 object. The axes object 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 object. The axes object 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.

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

свернуть все

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

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

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

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

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

chkFIS возвращен только, когда вы задаете данные о валидации с помощью options.ValidationData.

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

chkError возвращен только, когда вы задаете данные о валидации с помощью options.ValidationData.

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

tunefis Функция

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

Чтобы использовать ANFIS, задайте настраивающийся алгоритм как "anfis" \in tunefisOptions. Затем используйте объект опций в качестве входного параметра для 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] Jang, J.-S. R. "Нечеткое Моделирование Используя Обобщенные Нейронные сети и Алгоритм Фильтра Калмана", Proc. Девятой Национальной Конференции по Искусственному интеллекту (AAAI-91). Июль 1991, стр 762-767.

[2] Jang, J.-S. R. "ANFIS: "Адаптивная Сеть основывала" Нечеткие Системы Вывода", Транзакции IEEE в Системах, Человеке, и Кибернетике, Издании 23, № 3, май 1993, стр 665-685.

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