tunefis

Настройка системы нечеткого вывода или дерева систем нечеткого вывода

Описание

пример

fisout = tunefis(fisin,paramset,in,out) настраивает систему нечеткого вывода fisin использование настроек настраиваемого параметра, заданных в paramset и обучающих данных, заданных in и out.

fisout = tunefis(fisin,paramset,custcostfcn) настраивает систему нечеткого вывода с помощью указателя на функцию пользовательских затрат, custcostfcn.

пример

fisout = tunefis(___,options) настраивает систему нечеткого вывода с помощью дополнительных опций объекта options созданный с использованием tunefisOptions.

[fisout,summary] = tunefis(___) настраивает систему нечеткого вывода и возвращает дополнительную информацию об алгоритме настройки в summary.

Примеры

свернуть все

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

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

fisout = tunefis(fisin,[in;out],x,y,tunefisOptions("Method","anfis"));
ANFIS info:
	Number of nodes: 24
	Number of linear parameters: 10
	Number of nonlinear parameters: 15
	Total number of parameters: 25
	Number of training data pairs: 101
	Number of checking data pairs: 0
	Number of fuzzy rules: 5


Start training ANFIS ...

1 	 0.0694086
2 	 0.0680259
3 	 0.066663
4 	 0.0653198
Step size increases to 0.011000 after epoch 5.
5 	 0.0639961
6 	 0.0626917
7 	 0.0612787
8 	 0.0598881
Step size increases to 0.012100 after epoch 9.
9 	 0.0585193
10 	 0.0571712

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

Minimal training RMSE = 0.0571712

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

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);

Настройте только параметр правила. В этом примере используется метод поиска шаблона.

fisout = tunefis(fisin,rule,x,y,tunefisOptions("Method","patternsearch"));
Iter     Func-count       f(x)      MeshSize     Method
    0           1       0.346649             1      
    1          19       0.346649           0.5     Refine Mesh
    2          37       0.346649          0.25     Refine Mesh
    3          55       0.346649         0.125     Refine Mesh
    4          73       0.346649        0.0625     Refine Mesh
    5          91       0.346649       0.03125     Refine Mesh
    6         109       0.346649       0.01562     Refine Mesh
    7         127       0.346649      0.007812     Refine Mesh
    8         145       0.346649      0.003906     Refine Mesh
    9         163       0.346649      0.001953     Refine Mesh
   10         181       0.346649     0.0009766     Refine Mesh
   11         199       0.346649     0.0004883     Refine Mesh
   12         217       0.346649     0.0002441     Refine Mesh
   13         235       0.346649     0.0001221     Refine Mesh
   14         253       0.346649     6.104e-05     Refine Mesh
   15         271       0.346649     3.052e-05     Refine Mesh
   16         289       0.346649     1.526e-05     Refine Mesh
   17         307       0.346649     7.629e-06     Refine Mesh
   18         325       0.346649     3.815e-06     Refine Mesh
   19         343       0.346649     1.907e-06     Refine Mesh
   20         361       0.346649     9.537e-07     Refine Mesh
Optimization terminated: mesh size less than options.MeshTolerance.

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

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);

Вы можете настроить с пользовательскими настройками параметра, используя setTunable или запись через точку.

Не настраивайте вход 1.

in(1) = setTunable(in(1),false);

Для выхода 1:

  • не настраивать функции членства 1 и 2,

  • не настраивать функцию членства 3,

  • установите минимальную область значений параметров функции членства 4 в -2,

  • и установите максимальную область значений параметров функции членства 5 равным 2.

out(1).MembershipFunctions(1:2) = setTunable(out(1).MembershipFunctions(1:2),false);
out(1).MembershipFunctions(3).Parameters.Free = false;
out(1).MembershipFunctions(4).Parameters.Minimum = -2;
out(1).MembershipFunctions(5).Parameters.Maximum = 2;

Для параметров правила,

  • не настраивать правила 1 и 2,

  • установите предшествующее значение правила 3 на нерегулируемое,

  • разрешить НЕ логику в предшествующем элементе правила 4,

  • и не игнорируйте никаких выходов в правиле 3.

rule(1:2) = setTunable(rule(1:2),false);
rule(3).Antecedent.Free = false;
rule(4).Antecedent.AllowNot = true;
rule(3).Consequent.AllowEmpty = false;

Установите максимальное количество итераций равное 20 и настройте систему нечеткого вывода.

opt = tunefisOptions("Method","particleswarm");
opt.MethodOptions.MaxIterations = 20;
fisout = tunefis(fisin,[in;out;rule],x,y,opt);
                                 Best            Mean     Stall
Iteration     f-count            f(x)            f(x)    Iterations
    0              90          0.3265           1.857        0
    1             180          0.3265           4.172        0
    2             270          0.3265           3.065        1
    3             360          0.3265           3.839        2
    4             450          0.3265           3.386        3
    5             540          0.3265           3.249        4
    6             630          0.3265           3.311        5
    7             720          0.3265           2.901        6
    8             810          0.3265           2.868        7
    9             900          0.3181            2.71        0
   10             990          0.3181           2.068        1
   11            1080          0.3181           2.692        2
   12            1170          0.3165           2.146        0
   13            1260          0.3165           1.869        1
   14            1350          0.3165           2.364        2
   15            1440          0.3165            2.07        0
   16            1530          0.3164           1.678        0
   17            1620          0.2978           1.592        0
   18            1710          0.2977           1.847        0
   19            1800          0.2954           1.666        0
   20            1890          0.2947           1.608        0
Optimization ended: number of iterations exceeded OPTIONS.MaxIterations.

Чтобы предотвратить сверхподбор кривой настроенного FIS к обучающим данным с помощью перекрестной валидации k-fold.

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

load fuzex1trnData.dat

Создайте систему нечеткого вывода для обучающих данных.

opt = genfisOptions('GridPartition');
opt.NumMembershipFunctions = 4;
opt.InputMembershipFunctionType = "gaussmf";
inputData = fuzex1trnData(:,1);
outputData = fuzex1trnData(:,2);
fis = genfis(inputData,outputData,opt);

Для воспроизводимости установите начальное значение генератора случайных чисел.

rng('default')

Настройте опции настройки FIS. Используйте метод настройки по умолчанию с максимальным 30 итераций.

tuningOpt = tunefisOptions;
tuningOpt.MethodOptions.MaxGenerations = 30;

Сконфигурируйте следующие опции для использования k-fold cross валидации.

  • Используйте k-кратное значение 3.

  • Вычислите скользящее среднее значение стоимости валидации с помощью окна длины 2.

  • Остановите каждую итерацию проверки обучения, если средняя стоимость на 5% превышает текущую минимальную стоимость.

tuningOpt.KFoldValue = 3;
tuningOpt.ValidationWindowSize = 2;
tuningOpt.ValidationTolerance = 0.05;

Получите настройки настройки параметров функции принадлежности FIS.

 [in,out] = getTunableSettings(fis);

Настройка FIS.

[outputFIS,info] = tunefis(fis,[in;out],inputData,outputData,tuningOpt);
                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400          0.2421          0.5109        0
    2              590          0.2292          0.4688        0
    3              780          0.2292          0.4443        1
    4              970          0.2256          0.4145        0
    5             1160          0.2165          0.3957        0
    6             1350          0.2165          0.3835        1
    7             1540          0.2077          0.3548        0
    8             1730          0.2077          0.3435        1
    9             1920          0.2012          0.3414        0
   10             2110          0.1857           0.316        0
Optimization terminated: validation tolerance exceeded.

Cross validation iteration 1: Minimum validation cost 0.294718 found at training cost 0.207704

                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400          0.2089          0.3924        0
    2              590          0.2059          0.3655        0
Optimization terminated: validation tolerance exceeded.

Cross validation iteration 2: Minimum validation cost 0.306682 found at training cost 0.220498

                                  Best           Mean      Stall
Generation      Func-count        f(x)           f(x)    Generations
    1              400          0.2489          0.3936        0
    2              590          0.2438          0.3837        0
    3              780          0.2438          0.3779        1
    4              970          0.2067          0.3476        0
Optimization terminated: validation tolerance exceeded.

Cross validation iteration 3: Minimum validation cost 0.220104 found at training cost 0.255407

Оцените FIS для каждого из входных значений обучения.

outputTuned = evalfis(outputFIS,inputData);

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

plot([outputData,outputTuned])
legend("Expected Output","Tuned Output","Location","southeast")
xlabel("Data Index")
ylabel("Output value")

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Expected Output, Tuned Output.

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

свернуть все

Система нечеткого вывода, заданная как одно из следующего:

  • mamfis объект - система нечеткого вывода Mamdani

  • sugfis объект - система нечеткого вывода Sugeno

  • mamfistype2 объект - Type-2 системы нечеткого вывода Мамдани

  • sugfistype2 объект - Type-2 системы нечеткого вывода Sugeno

  • fistree объект - Дерево взаимосвязанных систем нечеткого вывода

Настраиваемые параметры настройки, заданные как массив входа, выхода и параметров правила в вход FIS. Чтобы получить эти настройки параметра, используйте getTunableSettings функция с входом fisin.

paramset могут быть входами, вывода или правила, или любой комбинацией этих настроек.

Входные обучающие данные, заданные как m -by - n матрица, где m - общее количество входных наборов данных и n - количество входов. Количество входа и выхода наборов данных должно быть одинаковым.

Вывод обучающих данных, заданный как m -by - q матрица, где m - общее количество выходных наборов данных и q - количество выходов. Количество входа и выхода наборов данных должно быть одинаковым.

Опции настройки FIS, заданные как tunefisOptions объект. Можно задать метод алгоритма настройки и другие опции для процесса настройки.

Пользовательская функция стоимости, заданная как указатель на функцию. Пользовательская функция затрат оценивает fisout вычислить его стоимость относительно критерия оценки, такого как входные/выходные данные. custcostfcn должен принять по крайней мере один входной параметр для fisout и возвращает значение. Можно предоставить указатель анонимной функции, чтобы прикрепить дополнительные данные для вычисления стоимости, как описано в этом примере:

function fitness = custcost(cost,trainingData)
  ...
end
custcostfcn = @(fis)custcost(fis,trainingData);

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

свернуть все

Система нечеткого вывода, заданная как одно из следующего:

  • mamfis объект - система нечеткого вывода Mamdani

  • sugfis объект - система нечеткого вывода Sugeno

  • mamfistype2 объект - Type-2 системы нечеткого вывода Мамдани

  • sugfistype2 объект - Type-2 системы нечеткого вывода Sugeno

  • fistree объект - Дерево взаимосвязанных систем нечеткого вывода

fisout - тот же тип FIS, что и fisin.

Сводные данные алгоритма настройки, заданная как структура, содержащая следующие поля:

  • tuningOutputs - Информация о настройке для конкретного алгоритма

  • totalFunctionCount - Общее количество оценок функции оптимизации затрат

  • totalRuntime - Общее время выполнения процесса настройки в секундах

  • errorMessage - Любое сообщение об ошибке, сгенерированное при обновлении fisin с новыми значениями параметров

tuningOutputs - структура, содержащая информацию о настройке для алгоритма, заданного в options. Поля в tuningOutputs зависят от заданного алгоритма настройки. При использовании k-fold cross validation, tuningOutputs - массив k структур, каждая из которых содержит информацию о настройке для одной итерации проверки и обучения.

При использовании k-кратной валидации totalFunctionCount и totalRuntime общая стоимость функции вычислений функции и общее время запуска для всех k итераций обучения-валидации.

Введенный в R2019a