Настройте нечеткую систему вывода или дерево нечетких систем вывода
настраивает нечеткую систему вывода с помощью указателя на функцию для пользовательской функции стоимости, fisout
= tunefis(fisin
,paramset
,custcostfcn
)custcostfcn
.
настраивает нечеткую систему вывода с дополнительными опциями из объекта fisout
= tunefis(___,options
)options
созданное использование tunefisOptions
.
Создайте начальную нечеткую систему вывода с помощью 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")
fisin
— Нечеткая система выводаmamfis
объект | sugfis
объект | mamfistype2
объект | sugfistype2
объект | fistree
объектНечеткая система вывода в виде одного из следующего:
mamfis
объект — Mamdani нечеткая система вывода
sugfis
объект — Sugeno нечеткая система вывода
mamfistype2
объект — Тип 2 Mamdani нечеткая система вывода
sugfistype2
объект — Тип 2 Sugeno нечеткая система вывода
fistree
объект — Дерево взаимосвязанных нечетких систем вывода
paramset
— Настройки настраиваемого параметраНастройки настраиваемого параметра в виде массива входа, выхода и установок параметров правила во входе FIS. Чтобы получить эти установки параметров, используйте getTunableSettings
функция с входом fisin
.
paramset
может быть вход, вывести или управлять установками параметров или любой комбинацией этих настроек.
in
— Введите обучающие данныеВведите обучающие данные в виде m-by-n матрица, где m является общим количеством входных наборов данных, и n является количеством входных параметров. Количество наборов данных ввода и вывода должно быть тем же самым.
out
— Выведите обучающие данныеВыведите обучающие данные в виде m-by-q матрица, где m является общим количеством выходных наборов данных, и q является количеством выходных параметров. Количество наборов данных ввода и вывода должно быть тем же самым.
options
— FIS настраивающиеся опцииtunefisOptions
опция установленаFIS настраивающиеся опции в виде a tunefisOptions
объект. Можно задать настраивающийся метод алгоритма и другие опции для настраивающего процесса.
custcostfcn
— пользовательские функции стоимостиПользовательская функция стоимости в виде указателя на функцию. Пользовательская функция стоимости оценивает fisout
вычислить его стоимость относительно критерия оценки, такого как данные о вводе/выводе. custcostfcn
должен принять по крайней мере один входной параметр для fisout
и возвращает величину затрат. Можно обеспечить указатель анонимной функции, чтобы присоединить дополнительные данные для расчета стоимости, как описано в этом примере:
function fitness = custcost(cost,trainingData) ... end custcostfcn = @(fis)custcost(fis,trainingData);
fisout
— Нечеткая система выводаmamfis
объект | sugfis
объект | mamfistype2
объект | sugfistype2
объект | fistree
объектНечеткая система вывода в виде одного из следующего:
mamfis
объект — Mamdani нечеткая система вывода
sugfis
объект — Sugeno нечеткая система вывода
mamfistype2
объект — Тип 2 Mamdani нечеткая система вывода
sugfistype2
объект — Тип 2 Sugeno нечеткая система вывода
fistree
объект — Дерево взаимосвязанных нечетких систем вывода
fisout
тот же тип FIS как fisin
.
summary
— Настройка сводных данных алгоритмаНастройка сводных данных алгоритма в виде структуры, содержащей следующие поля:
tuningOutputs
— Специфичная для алгоритма информация о настройке
totalFunctionCount
— Общее количество оценок функции стоимости оптимизации
totalRuntime
— Общее время выполнения настраивающего процесса в секундах
errorMessage
— Любое сообщение об ошибке сгенерировано при обновлении fisin
с новыми значениями параметров
tuningOutputs
структура, которая содержит настраивающуюся информацию для алгоритма, заданного в options
. Поля в tuningOutputs
зависьте от заданного настраивающего алгоритма. При использовании k - сворачивают перекрестную проверку, tuningOutputs
массив структур k, каждый содержащий настраивающуюся информацию для одной итерации учебной валидации.
При использовании k - сворачивают валидацию, totalFunctionCount
и totalRuntime
общие функциональные оценки функции стоимости и общее время выполнения через все итерации учебной валидации k.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.