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