Этот пример показывает, как к настройкам параметров дерева FIS, которое является набором связанных нечетких систем вывода. Этот пример использует рой частицы и оптимизацию поиска шаблона, которые требуют программного обеспечения Global Optimization Toolbox™.
Автомобильный прогноз расхода топлива в милях на галлон (MPG) является типичной нелинейной проблемой регрессии. Это использует несколько автомобильных атрибутов профиля, чтобы предсказать расход топлива. Данные тренировки доступны в Калифорнийском университете в Репозитории Машинного обучения Ирвина и содержат данные, собранные от автомобилей различных, делает и модели.
Этот пример использует следующие шесть атрибутов входных данных, чтобы предсказать, что выходные данные приписывают MPG с деревом FIS:
Количество цилиндров
Смещение
Лошадиная сила
Вес
Ускорение
Модельный год
Загрузите данные. Каждая строка набора данных, полученного из репозитория, представляет различный автомобильный профиль.
data = loadgas;
data содержит 7 столбцов, где первые шесть столбцов содержат следующие входные атрибуты.
Количество цилиндров
Смещение
Лошадиная сила
Вес
Ускорение
Модельный год
Седьмой столбец содержит выходной атрибут, MPG.
Создайте отдельные наборы входных и выходных данных, X и Y, соответственно.
X = data(:,1:6); Y = data(:,7);
Разделите наборы входных и выходных данных в данные тренировки (нечетно индексированные выборки) и данные о валидации (даже индексированные выборки).
trnX = X(1:2:end,:); % Training input data set trnY = Y(1:2:end,:); % Training output data set vldX = X(2:2:end,:); % Validation input data set vldY = Y(2:2:end,:); % Validation output data set
Извлеките область значений каждого атрибута данных, который вы будете использовать для определения области значений ввода/вывода во время конструкции FIS.
dataRange = [min(data)' max(data)'];
В данном примере создайте дерево FIS с помощью следующих шагов:
Оцените входные атрибуты на основе их корреляций с выходным атрибутом.
Создайте несколько объектов FIS с помощью оцениваемых входных атрибутов.
Создайте дерево FIS из объектов FIS.
Оцените входные параметры согласно коэффициентам корреляции
Вычислите коэффициенты корреляции для данных тренировки. В итоговой строке корреляционной матрицы первые шесть элементов показывают коэффициенты корреляции между шестью помещенными атрибутами данных и выходным атрибутом.
c1 = corrcoef(data); c1(end,:)
ans = 1×7
-0.7776 -0.8051 -0.7784 -0.8322 0.4233 0.5805 1.0000
Первые четыре входных атрибута имеют отрицательные величины, и последние два входных атрибута имеют положительные значения.
Оцените входные атрибуты, которые имеют отрицательные корреляции в порядке убывания абсолютным значением их коэффициентов корреляции.
Вес
Смещение
Лошадиная сила
Количество цилиндров
Оцените входные атрибуты, которые имеют положительные корреляции в порядке убывания абсолютным значением их коэффициентов корреляции.
Модельный год
Ускорение
Эти рейтинги показывают, что вес и модельный год имеет самые высокие отрицательные и положительные корреляции с MPG, соответственно.
Создайте нечеткие системы вывода
В данном примере реализуйте дерево FIS со следующей структурой.

Дерево FIS использует, приблизительно два вводят объект вывода FIS сократить общее количество правил, использованных В процессе вывода. fis1, fis2 и fis3 непосредственно берут входные значения и генерируют промежуточные значения MPG, которые далее объединены с помощью fis4 и fis5.
Входные атрибуты со значениями отрицательной и положительной корреляции разделены на пары, чтобы объединить и положительные и отрицательные эффекты на вывод для прогноза. Входные параметры сгруппированы согласно их рангам можно следующим образом:
Вес и модельный год
Смещение и ускорение
Лошадиная сила и количество цилиндров
Последняя группа включает только входные параметры со значениями отрицательной корреляции, поскольку существует только два входных параметров со значениями положительной корреляции.
Этот пример использует Sugeno-тип объекты FIS для более быстрой оценки во время настраивающего процесса по сравнению с системами Mamdani. Каждый FIS включает два входных параметров и один вывод, где каждый вход содержит две треугольных функции принадлежности по умолчанию (MFS), и вывод включает 4 постоянных MFS по умолчанию. Задайте области значений ввода и вывода с помощью соответствующих областей значений атрибута данных.
Первый FIS комбинирует атрибуты модельного года и вес.
fis1 = sugfis('Name','fis1'); fis1 = addInput(fis1,dataRange(4,:),'NumMFs',2,'Name',"weight"); fis1 = addInput(fis1,dataRange(6,:),'NumMFs',2,'Name',"year"); fis1 = addOutput(fis1,dataRange(7,:),'NumMFs',4);
Второй FIS комбинирует ускоряющие атрибуты и смещение.
fis2 = sugfis('Name','fis2'); fis2 = addInput(fis2,dataRange(2,:),'NumMFs',2,'Name',"displacement"); fis2 = addInput(fis2,dataRange(5,:),'NumMFs',2,'Name',"acceleration"); fis2 = addOutput(fis2,dataRange(7,:),'NumMFs',4);
Третий FIS комбинирует лошадиную силу и количество цилиндрических атрибутов.
fis3 = sugfis('Name','fis3'); fis3 = addInput(fis3,dataRange(3,:),'NumMFs',2,'Name',"horsepower"); fis3 = addInput(fis3,dataRange(1,:),'NumMFs',2,'Name',"cylinders"); fis3 = addOutput(fis3,dataRange(7,:),'NumMFs',4);
Четвертый FIS комбинирует выходные параметры первого и второго FIS.
fis4 = sugfis('Name','fis4'); fis4 = addInput(fis4,dataRange(7,:),'NumMFs',2); fis4 = addInput(fis4,dataRange(7,:),'NumMFs',2); fis4 = addOutput(fis4,dataRange(7,:),'NumMFs',4);
Итоговый FIS комбинирует выходные параметры третьего и четвертого FIS и генерирует предполагаемый MPG. Этот FIS имеет те же области значений ввода и вывода как четвертый FIS.
fis5 = fis4; fis5.Name = 'fis5'; fis5.Outputs(1).Name = "mpg";
Создайте дерево FIS
Соедините нечеткие системы (fis1, fis2, fis3, fis4 и fis5) согласно древовидной схеме FIS.
fisTin = fistree([fis1 fis2 fis3 fis4 fis5],[ ... "fis1/output1" "fis4/input1"; ... "fis2/output1" "fis4/input2"; ... "fis3/output1" "fis5/input2"; ... "fis4/output1" "fis5/input1"])
fisTin =
fistree with properties:
FIS: [1×5 sugfis]
Connections: [4×2 string]
Inputs: [6×1 string]
Outputs: "fis5/mpg"
DisableStructuralChecks: 0
See 'getTunableSettings' method for parameter optimization.
Настройка выполняется на двух шагах.
Изучите основу правила при хранении параметров MF ввода и вывода постоянными.
Настройте параметры MFS ввода/вывода и правил.
Первый шаг является менее в вычислительном отношении дорогим из-за небольшого количества параметров правила, и это быстро сходится к нечеткой основе правила во время обучения. На втором шаге с помощью основы правила от первого шага, когда начальное условие обеспечивает быструю сходимость настраивающего процесса параметра.
Изучите правила
Чтобы изучить основу правила, сначала задайте настраивающиеся опции с помощью объекта tunefisOptions. Глобальные методы оптимизации (генетический алгоритм или рой частицы) подходят для начальной подготовки, когда все параметры нечеткой системы не настраиваются. В данном примере настройте дерево FIS с помощью метода оптимизации роя частицы ('particleswarm').
Чтобы изучить новые правила, установите OptimizationType на 'learning'. Ограничьте максимальное количество правил к 4. Количество настроенных правил каждого FIS может быть меньше, чем этот предел, поскольку настраивающий процесс удаляет дублирующиеся правила.
options = tunefisOptions('Method','particleswarm',... 'OptimizationType','learning', ... 'NumMaxRules',4);
Если у вас есть программное обеспечение Parallel Computing Toolbox™, можно улучшить скорость настраивающего процесса установкой options.UseParallel к true. Если у вас нет программного обеспечения Parallel Computing Toolbox, установите options.UseParallel на false.
Определите максимальный номер итераций к 50. Чтобы уменьшать учебную ошибку в процессе обучения правила, можно увеличить число итераций. Однако использование слишком многих итераций может сверхнастроить дерево FIS на данные тренировки, увеличив ошибки валидации.
options.MethodOptions.MaxIterations = 50;
Поскольку оптимизация роя частицы использует случайный поиск, чтобы получить восстанавливаемые результаты, инициализировать генератор случайных чисел к его настройке по умолчанию.
rng('default')Настройте дерево FIS с помощью заданных настраивающих данных и опций. Установите входной порядок данных тренировки согласно древовидным связям FIS можно следующим образом: weight, year, displacement, acceleration, horsepower и cylinders.
inputOrders1 = [4 6 2 5 3 1]; orderedTrnX1 = trnX(:,inputOrders1);
Изучение правил с функцией tunefis занимает приблизительно 4 минуты. В данном примере позвольте настроиться установкой runtunefis на true. Чтобы загрузить предварительно обученные результаты, не запуская tunefis, можно установить runtunefis на false.
runtunefis = true;
Установки параметров могут быть пустыми при изучении новых правил. Для получения дополнительной информации смотрите tunefis.
if runtunefis fisTout1 = tunefis(fisTin,[],orderedTrnX1,trnY,options); else tunedfis = load('tunedfistreempgprediction.mat'); %#ok<UNRCH> fisTout1 = tunedfis.fisTout1; fprintf('Training RMSE = %.3f MPG\n',calculateRMSE(fisTout1,orderedTrnX1,trnY)); end
Best Mean Stall
Iteration f-count f(x) f(x) Iterations
0 100 5.697 12.63 0
1 200 5.697 14.45 0
2 300 5.222 12.26 0
3 400 5.222 13.44 1
4 500 5.222 12.9 2
5 600 4.944 12.19 0
6 700 4.944 12.2 1
7 800 4.563 13.31 0
8 900 4.563 12.92 1
9 1000 4.563 12.06 2
10 1100 4.563 13.32 3
11 1200 4.563 11.82 4
12 1300 4.563 13.04 5
13 1400 4.563 12.2 6
14 1500 4.563 11.94 7
15 1600 4.563 11.33 8
16 1700 4.563 10.71 9
17 1800 4.538 11.39 0
18 1900 4.538 11.27 1
19 2000 4.538 11.32 2
20 2100 4.538 11.26 3
21 2200 4.538 11.07 4
22 2300 4.538 10.53 5
23 2400 4.538 10.15 6
24 2500 4.538 10.66 7
25 2600 4.452 10.28 0
26 2700 4.408 10.42 0
27 2800 4.243 9.661 0
28 2900 4.061 9.153 0
29 3000 4.061 9.849 1
30 3100 4.024 9.029 0
Best Mean Stall
Iteration f-count f(x) f(x) Iterations
31 3200 4.024 9.91 1
32 3300 4.024 8.847 2
33 3400 3.996 8.684 0
34 3500 3.991 8.674 0
35 3600 3.569 9.125 0
36 3700 3.569 8.942 1
37 3800 3.512 8.21 0
38 3900 3.512 8.262 1
39 4000 3.512 8.452 2
40 4100 3.485 8.343 0
41 4200 3.485 8.451 1
42 4300 3.437 8.52 0
43 4400 3.425 8.136 0
44 4500 3.425 8.254 1
45 4600 3.423 8.065 0
46 4700 3.423 7.6 1
47 4800 3.417 7.586 0
48 4900 3.399 7.546 0
49 5000 3.399 7.335 1
50 5100 3.399 7.816 2
Optimization ended: number of iterations exceeded OPTIONS.MaxIterations.
Столбец Best f(x) показывает учебную среднеквадратическую ошибку (RMSE).
Процесс обучения производит набор новых правил для дерева FIS.
fprintf("Total number of rules = %d\n",numel([fisTout1.FIS.Rules]));Total number of rules = 17
Изученная система должна иметь подобную производительность RMSE и для наборов данных обучения и для валидации. Чтобы вычислить RMSE для набора данных валидации, оцените fisout1 с помощью набора входных данных валидации vldX. Чтобы скрыть предупреждения во время выполнения во время оценки, установите все опции предупреждения на none.
Вычислите RMSE между сгенерированными выходными данными, и выходные данные валидации устанавливают vldY. Поскольку ошибки обучения и валидации подобны, изученная система не сверхсоответствует данным тренировки.
orderedVldX1 = vldX(:,inputOrders1); plotActualAndExpectedResultsWithRMSE(fisTout1,orderedVldX1,vldY)

Настройте все параметры
После изучения новых правил настройте параметры MF ввода/вывода наряду с параметрами изученных правил. Чтобы получить настраиваемые параметры дерева FIS, используйте функцию getTunableSettings.
[in,out,rule] = getTunableSettings(fisTout1);
Чтобы настроить существующие древовидные установки параметров FIS, не изучая новых правил, установите OptimizationType на 'tuning'.
options.OptimizationType = 'tuning';Поскольку дерево FIS уже узнало, что правила с помощью данных тренировки, используют локальный метод оптимизации для быстрой сходимости значений параметров. В данном примере используйте метод оптимизации поиска шаблона ('patternsearch').
options.Method = 'patternsearch';Настройка древовидных параметров FIS берет больше итераций, чем предыдущий изучающий правило шаг. Поэтому увеличьте максимальное число итераций настраивающего процесса к 75. Как на первом настраивающем этапе, можно уменьшать учебные ошибки путем увеличения числа итераций. Однако использование слишком многих итераций может сверхнастроить параметры на данные тренировки, увеличив ошибки валидации.
options.MethodOptions.MaxIterations = 75;
Настройте древовидные параметры FIS с помощью заданных настраиваемых настроек, данных тренировки, и настроив опции.
Настройка значений параметров с функцией tunefis занимает несколько минут. Чтобы загрузить предварительно обученные результаты, не запуская tunefis, можно установить runtunefis на false.
rng('default') if runtunefis fisTout2 = tunefis(fisTout1,[in;out;rule],orderedTrnX1,trnY,options); else fisTout2 = tunedfis.fisTout2; %#ok<UNRCH> fprintf('Training RMSE = %.3f MPG\n',calculateRMSE(fisTout2,orderedTrnX1,trnY)); end
Iter Func-count f(x) MeshSize Method
0 1 3.56396 1
1 2 3.56389 2 Successful Poll
2 3 3.56374 4 Successful Poll
3 4 3.56344 8 Successful Poll
4 5 3.56285 16 Successful Poll
5 6 3.56172 32 Successful Poll
6 7 3.5596 64 Successful Poll
7 8 3.556 128 Successful Poll
8 9 3.55073 256 Successful Poll
9 10 3.5431 512 Successful Poll
10 17 3.5431 256 Refine Mesh
11 27 3.54 512 Successful Poll
12 34 3.54 256 Refine Mesh
13 48 3.54 128 Refine Mesh
14 50 3.53968 256 Successful Poll
15 55 3.53961 512 Successful Poll
16 62 3.53961 256 Refine Mesh
17 76 3.53961 128 Refine Mesh
18 84 3.35952 256 Successful Poll
19 86 3.35153 512 Successful Poll
20 93 3.35078 1024 Successful Poll
21 99 3.35078 512 Refine Mesh
22 107 3.35078 256 Refine Mesh
23 120 3.35078 128 Refine Mesh
24 141 3.34063 256 Successful Poll
25 150 3.33599 512 Successful Poll
26 158 3.33599 256 Refine Mesh
27 172 3.33599 128 Refine Mesh
28 181 3.33546 256 Successful Poll
29 194 3.33546 128 Refine Mesh
30 217 3.3198 256 Successful Poll
Iter Func-count f(x) MeshSize Method
31 230 3.3198 128 Refine Mesh
32 240 3.31883 256 Successful Poll
33 253 3.31883 128 Refine Mesh
34 275 3.31883 64 Refine Mesh
35 276 3.316 128 Successful Poll
36 298 3.316 64 Refine Mesh
37 321 3.316 32 Refine Mesh
38 329 3.31085 64 Successful Poll
39 347 3.30905 128 Successful Poll
40 348 3.30398 256 Successful Poll
41 361 3.30398 128 Refine Mesh
42 383 3.30398 64 Refine Mesh
43 408 3.30398 32 Refine Mesh
44 460 3.30398 16 Refine Mesh
45 467 3.30375 32 Successful Poll
46 519 3.30375 16 Refine Mesh
47 532 3.30329 32 Successful Poll
48 584 3.30329 16 Refine Mesh
49 598 3.28079 32 Successful Poll
50 608 3.28036 64 Successful Poll
51 630 3.27888 128 Successful Poll
52 639 3.27672 256 Successful Poll
53 652 3.27672 128 Refine Mesh
54 672 3.27672 64 Refine Mesh
55 697 3.27672 32 Refine Mesh
56 750 3.27672 16 Refine Mesh
57 779 3.27535 32 Successful Poll
58 832 3.27535 16 Refine Mesh
59 863 3.27182 32 Successful Poll
60 910 3.26985 64 Successful Poll
Iter Func-count f(x) MeshSize Method
61 935 3.26985 32 Refine Mesh
62 988 3.26985 16 Refine Mesh
63 1064 3.26985 8 Refine Mesh
64 1066 3.26957 16 Successful Poll
65 1142 3.26957 8 Refine Mesh
66 1155 3.26792 16 Successful Poll
67 1231 3.26792 8 Refine Mesh
68 1247 3.26139 16 Successful Poll
69 1323 3.26139 8 Refine Mesh
70 1421 3.26139 4 Refine Mesh
71 1422 3.26118 8 Successful Poll
72 1520 3.26118 4 Refine Mesh
73 1522 3.26095 8 Successful Poll
74 1620 3.26095 4 Refine Mesh
75 1633 3.26094 8 Successful Poll
76 1731 3.26094 4 Refine Mesh
Maximum number of iterations exceeded: increase options.MaxIterations.
В конце настраивающего процесса учебная ошибка уменьшает по сравнению с предыдущим шагом.
Подтвердите производительность настроенного дерева FIS, fisout2, с помощью входных данных валидации установил vldX.
Сравните ожидаемый MPG, полученный из выходных данных валидации, установил vldY и фактический MPG, сгенерированный с помощью fisout2. Вычислите RMSE между этими результатами.
plotActualAndExpectedResultsWithRMSE(fisTout2,orderedVldX1,vldY)

Настройка древовидных параметров FIS улучшается, RMSE по сравнению с результатами начальной буквы изучил основу правила. Поскольку ошибки обучения и валидации подобны, значения параметров не сверхнастраиваются.
Чтобы получить сведения об операции вашего нечеткого дерева, можно добавить выходные параметры нечетких систем компонента как выходные параметры дерева FIS. В данном примере, чтобы получить доступ к промежуточному FIS выходные параметры, добавьте три дополнительных выходных параметров в настроенное дерево FIS.
fisTout3 = fisTout2; fisTout3.Outputs(end+1) = "fis1/output1"; fisTout3.Outputs(end+1) = "fis2/output1"; fisTout3.Outputs(end+1) = "fis3/output1";
Чтобы сгенерировать дополнительные выходные параметры, оцените увеличенное дерево FIS, fisTout3.
actY = evaluateFIS(fisTout3,orderedVldX1); figure,plot(actY(:,[2 3 4 1])),xlabel("Input dataset index"),ylabel("MPG"),axis([1 200 0 55]) legend(["Output of fis1" "Output of fis2" "Output of fis3" "Output of fis5"],... 'Location','NorthEast','NumColumns',2) title("Intermediate and Final Outputs")

Окончательный результат дерева FIS (fis5 вывод), кажется, высоко коррелируется с выходными параметрами fis1 и fis3. Чтобы подтвердить эту оценку, проверяйте коэффициенты корреляции FIS выходные параметры.
c2 = corrcoef(actY(:,[2 3 4 1])); c2(end,:)
ans = 1×4
0.9724 0.7935 -0.8156 1.0000
Последняя строка корреляционной матрицы показывает, что выходные параметры fis1 и fis3 (сначала и третий столбец, соответственно) имеют более высокие корреляции с окончательным результатом по сравнению с выводом fis2 (второй столбец). Этот результат показывает, что упрощение дерева FIS путем удаления fis2 и fis4 и может потенциально привести к подобным учебным результатам по сравнению с исходной древовидной структурой.
Удалите fis2 и fis4 от дерева FIS и соедините вывод fis1 к первому входу fis5. Когда вы удаляете FIS из дерева FIS, любых существующих связей с этим, FIS также удалены.

fisTout3.FIS([2 4]) = []; fisTout3.Connections(end+1,:) = ["fis1/output1" "fis5/input1"]; fis5.Inputs(1).Name = "fis1out";
Заставить количество древовидных выходных параметров FIS совпадать с количеством выходных параметров в данных тренировки, удалить древовидные выходные параметры FIS из fis1 и fis3.
fisTout3.Outputs(2:end) = [];
Обновите входной порядок данных тренировки согласно новой древовидной входной настройке FIS.
inputOrders2 = [4 6 3 1]; orderedTrnX2 = trnX(:,inputOrders2);
Поскольку древовидная настройка FIS изменяется, необходимо повторно выполнить и изучение и настройку шагов. В фазе изучения существующие параметры правила также настраиваются, чтобы соответствовать новой настройке дерева FIS.
options.Method = "particleswarm"; options.OptimizationType = "learning"; options.MethodOptions.MaxIterations = 50; [~,~,rule] = getTunableSettings(fisTout3); rng('default') if runtunefis fisTout4 = tunefis(fisTout3,rule,orderedTrnX2,trnY,options); else fisTout4 = tunedfis.fisTout4; %#ok<UNRCH> fprintf('Training RMSE = %.3f MPG\n',calculateRMSE(fisTout4,orderedTrnX2,trnY)); end
Best Mean Stall
Iteration f-count f(x) f(x) Iterations
0 100 5.592 11.74 0
1 200 5.592 13.89 0
2 300 5.278 12.52 0
3 400 4.84 11.89 0
4 500 4.84 12.98 1
5 600 3.803 11.59 0
6 700 3.803 12.25 1
7 800 3.803 11.88 2
8 900 3.803 12.28 3
9 1000 3.17 11.53 0
10 1100 3.17 12.09 1
11 1200 3.17 11.92 2
12 1300 3.17 11.38 3
13 1400 3.17 11.89 4
14 1500 3.17 10.51 5
15 1600 3.17 9.628 6
16 1700 3.17 9.383 7
17 1800 3.17 8.849 8
18 1900 3.17 8.35 9
19 2000 3.17 8.374 10
20 2100 3.163 7.869 0
21 2200 3.163 7.388 1
22 2300 3.163 7.35 2
23 2400 3.163 7.067 3
24 2500 3.163 7.111 4
25 2600 3.163 6.967 5
26 2700 3.085 6.565 0
27 2800 3.004 6.608 0
28 2900 3.004 6.321 1
29 3000 2.983 6.008 0
30 3100 2.983 5.986 1
Best Mean Stall
Iteration f-count f(x) f(x) Iterations
31 3200 2.983 6.467 2
32 3300 2.983 5.947 3
33 3400 2.977 5.921 0
34 3500 2.977 5.44 1
35 3600 2.977 5.796 2
36 3700 2.977 5.591 3
37 3800 2.977 5.492 4
38 3900 2.977 5.521 5
39 4000 2.977 5.628 6
40 4100 2.977 5.931 7
41 4200 2.943 5.258 0
42 4300 2.943 5.904 1
43 4400 2.943 6.198 2
44 4500 2.929 5.612 0
45 4600 2.929 5.587 1
46 4700 2.929 5.715 2
47 4800 2.929 5.525 3
48 4900 2.929 5.506 4
49 5000 2.929 5.336 5
50 5100 2.929 5.493 6
Optimization ended: number of iterations exceeded OPTIONS.MaxIterations.
В учебной фазе настраиваются параметры функции принадлежности и правил.
options.Method = "patternsearch"; options.OptimizationType = "tuning"; options.MethodOptions.MaxIterations = 75; [in,out,rule] = getTunableSettings(fisTout4); rng('default') if runtunefis fisTout5 = tunefis(fisTout4,[in;out;rule],orderedTrnX2,trnY,options); else fisTout5 = tunedfis.fisTout5; %#ok<UNRCH> fprintf('Training RMSE = %.3f MPG\n',calculateRMSE(fisTout5,orderedTrnX2,trnY)); end
Iter Func-count f(x) MeshSize Method
0 1 2.92888 1
1 2 2.92888 2 Successful Poll
2 3 2.92887 4 Successful Poll
3 4 2.92884 8 Successful Poll
4 5 2.92881 16 Successful Poll
5 6 2.92879 32 Successful Poll
6 14 2.9117 64 Successful Poll
7 15 2.91093 128 Successful Poll
8 22 2.90552 256 Successful Poll
9 23 2.88691 512 Successful Poll
10 29 2.88691 256 Refine Mesh
11 37 2.88691 128 Refine Mesh
12 38 2.88549 256 Successful Poll
13 46 2.88549 128 Refine Mesh
14 59 2.88549 64 Refine Mesh
15 65 2.88521 128 Successful Poll
16 78 2.88521 64 Refine Mesh
17 80 2.8825 128 Successful Poll
18 85 2.87991 256 Successful Poll
19 93 2.87991 128 Refine Mesh
20 106 2.87991 64 Refine Mesh
21 119 2.87526 128 Successful Poll
22 131 2.87526 64 Refine Mesh
23 147 2.87526 32 Refine Mesh
24 154 2.87514 64 Successful Poll
25 170 2.87514 32 Refine Mesh
26 180 2.86842 64 Successful Poll
27 187 2.86722 128 Successful Poll
28 200 2.86722 64 Refine Mesh
29 207 2.86719 128 Successful Poll
30 220 2.86719 64 Refine Mesh
Iter Func-count f(x) MeshSize Method
31 235 2.86719 32 Refine Mesh
32 236 2.86708 64 Successful Poll
33 251 2.86708 32 Refine Mesh
34 260 2.86638 64 Successful Poll
35 261 2.86515 128 Successful Poll
36 274 2.86515 64 Refine Mesh
37 289 2.86515 32 Refine Mesh
38 290 2.86501 64 Successful Poll
39 305 2.86501 32 Refine Mesh
40 336 2.86501 16 Refine Mesh
41 339 2.85839 32 Successful Poll
42 370 2.85839 16 Refine Mesh
43 374 2.85824 32 Successful Poll
44 405 2.85824 16 Refine Mesh
45 417 2.85823 32 Successful Poll
46 448 2.85823 16 Refine Mesh
47 490 2.85823 8 Refine Mesh
48 491 2.85822 16 Successful Poll
49 533 2.85822 8 Refine Mesh
50 535 2.85806 16 Successful Poll
51 547 2.85797 32 Successful Poll
52 578 2.85797 16 Refine Mesh
53 590 2.85796 32 Successful Poll
54 621 2.85796 16 Refine Mesh
55 663 2.85796 8 Refine Mesh
56 664 2.85795 16 Successful Poll
57 706 2.85795 8 Refine Mesh
58 711 2.8579 16 Successful Poll
59 753 2.8579 8 Refine Mesh
60 759 2.85743 16 Successful Poll
Iter Func-count f(x) MeshSize Method
61 771 2.85698 32 Successful Poll
62 778 2.85633 64 Successful Poll
63 785 2.85584 128 Successful Poll
64 797 2.85584 64 Refine Mesh
65 813 2.85584 32 Refine Mesh
66 844 2.85584 16 Refine Mesh
67 886 2.85584 8 Refine Mesh
68 904 2.85548 16 Successful Poll
69 905 2.85539 32 Successful Poll
70 936 2.85539 16 Refine Mesh
71 937 2.85538 32 Successful Poll
72 968 2.85538 16 Refine Mesh
73 1010 2.85538 8 Refine Mesh
74 1026 2.85537 16 Successful Poll
75 1068 2.85537 8 Refine Mesh
76 1090 2.82832 16 Successful Poll
Maximum number of iterations exceeded: increase options.MaxIterations.
В конце настраивающего процесса дерево FIS содержит обновленный MF и значения параметров правила. Базовый размер правила новой древовидной настройки FIS меньше, чем предыдущая настройка.
fprintf("Total number of rules = %d\n",numel([fisTout5.FIS.Rules]));Total number of rules = 11
Оцените обновленное дерево FIS с помощью четырех входных атрибутов набора данных проверки.
orderedVldX2 = vldX(:,inputOrders2); plotActualAndExpectedResultsWithRMSE(fisTout5,orderedVldX2,vldY)

Упрощенное дерево FIS с четырьмя входными атрибутами приводит к лучшим результатам с точки зрения RMSE по сравнению с первой настройкой, которая использует шесть входных атрибутов. Поэтому это показывает, что дерево FIS может быть представлено с меньшим количеством количества входных параметров и правил обобщить данные тренировки.
Можно далее улучшить учебную ошибку настроенного дерева FIS:
Растущее число итераций и в изучающих правило и в настраивающих параметр фазах. Выполнение так увеличивает длительность процесса оптимизации и может также увеличить ошибку валидации из-за сверхнастроенных системных параметров с данными тренировки.
Используя глобальные методы оптимизации, такие как ga и particleswarm, и в изучающих правило и в настраивающих параметр фазах. ga и particleswarm выполняют лучше для больших диапазонов настройки параметра, поскольку они - глобальные оптимизаторы. С другой стороны, patternsearch и simulannealbnd выполняют лучше для маленьких областей значений параметра, поскольку они - локальные оптимизаторы. Если правила уже добавляются к дереву FIS с помощью данных тренировки, то patternsearch и simulannealbnd могут произвести более быструю сходимость по сравнению с ga и particleswarm. Для получения дополнительной информации об этих методах оптимизации и их опциях, смотрите ga, particleswarm, patternsearch и simulannealbnd.
Изменяя свойства FIS, такие как тип FIS, количество входных параметров, количество MFS ввода/вывода, типов MF и количества правил. Для нечетких систем с большим количеством входных параметров Sugeno FIS обычно сходится быстрее, чем Mamdani FIS, поскольку система Sugeno имеет меньше параметров вывода MF (если MFS constant используется), и быстрее defuzzification. Небольшие числа MFS и правил сокращают количество параметров, чтобы настроиться, производя более быстрый настраивающий процесс. Кроме того, большое количество правил может сверхсоответствовать данным тренировки.
Изменение настроек настраиваемого параметра для MFS и правил. Например, можно настроить поддержку треугольного MF, не изменяя его пиковое местоположение. Выполнение так сокращает количество настраиваемых параметров и может произвести более быстрый настраивающий процесс для определенных приложений. Для правил можно исключить нулевые индексы MF путем установки AllowEmpty настраиваемая установка на false, который сокращает общее количество правил во время фазы изучения.
Изменяя свойства дерева FIS, такие как количество нечетких систем и связей между нечеткими системами.
Используя различный рейтинг и группировку входных параметров к дереву FIS.
function plotActualAndExpectedResultsWithRMSE(fis,x,y) % Calculate RMSE bewteen actual and expected results [rmse,actY] = calculateRMSE(fis,x,y); % Plot results figure subplot(2,1,1) hold on bar(actY) bar(y) bar(min(actY,y),'FaceColor',[0.5 0.5 0.5]) hold off axis([0 200 0 60]) xlabel("Validation input dataset index"),ylabel("MPG") legend(["Actual MPG" "Expected MPG" "Minimum of actual and expected values"],... 'Location','NorthWest') title("RMSE = " + num2str(rmse) + " MPG") subplot(2,1,2) bar(actY-y) xlabel("Validation input dataset index"),ylabel("Error (MPG)") title("Difference Between Actual and Expected Values") end function [rmse,actY] = calculateRMSE(fis,x,y) % Evaluate FIS actY = evaluateFIS(fis,x); % Calculate RMSE del = actY - y; rmse = sqrt(mean(del.^2)); end function y = evaluateFIS(fis,x) % Specify options for FIS evaluation persistent evalOptions if isempty(evalOptions) evalOptions = evalfisOptions("EmptyOutputFuzzySetMessage","none", ... "NoRuleFiredMessage","none","OutOfRangeInputValueMessage","none"); end % Evaluate FIS y = evalfis(fis,x,evalOptions); end
fistree | getTunableSettings | sugfis | tunefis