exponenta event banner

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 в неперестраиваемое состояние,

  • разрешить логику NOT в начале правила 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-кратной перекрестной проверки.

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

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-кратной перекрестной проверки.

  • Использовать 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 объект - система нечеткого вывода Мамдани

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

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

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

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

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

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

Входные обучающие данные, определенные как матрица m-на-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 объект - система нечеткого вывода Мамдани

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

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

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

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

fisout является тем же типом FIS, что и fisin.

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

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

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

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

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

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

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

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