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-сгиба.

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

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);
Single objective optimization:
16 Variable(s)

Options:
CreationFcn:       @gacreationuniform
CrossoverFcn:      @crossoverscattered
SelectionFcn:      @selectionstochunif
MutationFcn:       @mutationadaptfeasible

                                  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

Single objective optimization:
16 Variable(s)

Options:
CreationFcn:       @gacreationuniform
CrossoverFcn:      @crossoverscattered
SelectionFcn:      @selectionstochunif
MutationFcn:       @mutationadaptfeasible

                                  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

Single objective optimization:
16 Variable(s)

Options:
CreationFcn:       @gacreationuniform
CrossoverFcn:      @crossoverscattered
SelectionFcn:      @selectionstochunif
MutationFcn:       @mutationadaptfeasible

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

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

свернуть все

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

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

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

  • mamfistype2 объект — Тип 2 Mamdani нечеткая система вывода

  • sugfistype2 объект — Тип 2 Sugeno нечеткая система вывода

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

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

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

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

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

FIS настраивающиеся опции в виде a tunefisOptions объект. Можно задать настраивающийся метод алгоритма и другие опции для настраивающего процесса.

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

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

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

свернуть все

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

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

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

  • mamfistype2 объект — Тип 2 Mamdani нечеткая система вывода

  • sugfistype2 объект — Тип 2 Sugeno нечеткая система вывода

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

fisout тот же тип FIS как fisin.

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

  • tuningOutputs — Специфичная для алгоритма информация о настройке

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

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

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

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

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

Смотрите также

|

Введенный в R2019a