exponenta event banner

Прогнозирование хаотичных временных рядов с использованием Type-2 FIS

В этом примере показано хаотичное прогнозирование временных рядов с использованием настроенной системы нечеткого вывода типа 2 (FIS). В этом примере FIS настраивается с использованием оптимизации роя частиц, которая требует программного обеспечения Global Optimization Toolbox™.

Данные временных рядов

В этом примере моделируются данные временных рядов с использованием следующей формы нелинейного дифференциального уравнения задержки Макки-Гласса (MG).

(t) = 0,2x (t-

Смоделировать временные ряды для 1200 выборок с использованием следующей конфигурации.

  • Время выборки ts = 1 с

  • Исходное условие x (0) = 1,2

  • τ=20

  • x (t-τ) =0 для t <τ.

ts = 1;
numSamples = 1200;
tau = 20;
x = zeros(1,numSamples+tau+1);
x(tau+1) = 1.2;
for t = 1+tau:numSamples+tau
    x_dot = 0.2*x(t-tau)/(1+(x(t-tau))^10)-0.1*x(t);
    x(t+1) = x(t) + ts*x_dot;
end

Постройте график смоделированных временных рядов MG.

figure(1)
plot(x(tau+2:end))
title('Mackey-Glass Chaotic Time Series')
xlabel('Time (sec)')
ylabel('x(t)')

Figure contains an axes. The axes with title Mackey-Glass Chaotic Time Series contains an object of type line.

Создание данных обучения и проверки

Предсказание временных рядов использует известные значения временных рядов вплоть до времени t для предсказания будущего значения в момент времени t + P. Стандартный метод для этого типа прогнозирования заключается в создании отображения из D точек данных выборки, дискретизированных через каждые Δ единиц во времени (x (t- (D-1) Δ),..., x (t-Δ), x (t)) к прогнозируемому будущему значению x = (t + P). Для этого примера задайте D = 4 и Δ = P = 1. Следовательно, для каждого t входными и выходными наборами обучающих данных являются [x (t-3), x (t-2), x (t-1), x (t)] и x (t + 1) соответственно. Другими словами, используйте четыре последовательных известных значения временных рядов для прогнозирования следующего значения.

Создайте 1000 наборов входных/выходных данных из выборок x (100 + D-1) в x (1100 + D-2).

D = 4;
inputData = zeros(1000,D);
outputData = zeros(1000,1);
for t = 100+D-1:1100+D-2
    for i = 1:D
        inputData(t-100-D+2,i) = x(t-D+i);
    end
    outputData(t-100-D+2,:) = x(t+1);
end

Использовать первые 500 наборов данных в качестве обучающих данных (trnX и trnY) и вторые 500 наборов в качестве данных проверки (vldX и vldY).

trnX = inputData(1:500,:);
trnY = outputData(1:500,:);
vldX = inputData(501:end,:);
vldY = outputData(501:end,:);

Построение FIS

В этом примере используется FIS Sugeno типа 2. Поскольку FIS Sugeno имеет меньше настраиваемых параметров, чем FIS Mamdani, система Sugeno обычно сходится быстрее во время оптимизации.

fisin = sugfistype2;

Добавьте три входа, каждый с тремя треугольными функциями членства по умолчанию (MF). Сначала устраните след неопределенности (FOU) для каждого входного MF, установив каждый нижний MF равным его соответствующему верхнему MF. Для этого установите значения шкалы и запаздывания для каждого нижнего MF в 1 и 0соответственно. Устраняя FOU для всех входных функций членства, можно настроить FIS типа 2 так, чтобы он вел себя как FIS типа 1.

numInputs = D;
numInputMFs = 3;
range = [min(x) max(x)];
for i = 1:numInputs
    fisin = addInput(fisin,range,'NumMFs',numInputMFs);
    for j = 1:numInputMFs
        fisin.Inputs(i).MembershipFunctions(j).LowerScale = 1;
        fisin.Inputs(i).MembershipFunctions(j).LowerLag = 0;
    end
end

Для прогнозирования добавьте вывод в FIS. Выходные данные содержат постоянные функции членства по умолчанию. Чтобы обеспечить максимальное разрешение для отображения «вход-выход», установите количество выходных MF, равное количеству входных комбинаций MF.

numOutputMFs = numInputMFs^numInputs;
fisin = addOutput(fisin,range,'NumMFs',numOutputMFs);

Просмотрите структуру FIS. Изначально FIS имеет нулевые правила. Правила системы находятся в процессе настройки.

plotfis(fisin)

Figure contains 6 axes. Axes 1 contains 6 objects of type line. Axes 2 contains 6 objects of type line. Axes 3 contains 6 objects of type line. Axes 4 contains 6 objects of type line. Axes 5 contains an object of type text. Axes 6 contains 3 objects of type text.

Настройка FIS с данными обучения

Для настройки FIS используются следующие три шага.

  1. Изучение базы правил при сохранении параметров ввода и вывода MF постоянными.

  2. Настройте выходные параметры MF и верхние параметры MF входов, сохраняя при этом правило и нижние параметры MF постоянными.

  3. Настройте нижние параметры MF входов, сохраняя правило, выходные параметры MF и верхние параметры MF постоянными.

Первый шаг менее затратен в вычислительном отношении из-за небольшого количества параметров правила, и он быстро сходится к нечеткой базе правил во время обучения. После второго шага система является обученной FIS типа 1. На третьем этапе создается FIS настроенного типа-2.

Изучение правил

Чтобы узнать базу правил, сначала задайте параметры настройки с помощью tunefisOptions объект.

options = tunefisOptions;

Поскольку FIS не содержит каких-либо предварительно настроенных нечетких правил, используйте метод глобальной оптимизации (генетический алгоритм или рой частиц), чтобы узнать правила. Методы глобальной оптимизации работают лучше в больших диапазонах настройки параметров по сравнению с методами локальной оптимизации (поиск шаблона и смоделированный отжиг). Для этого примера настройте FIS с помощью оптимизации роя частиц ('particleswarm').

options.Method = 'particleswarm';

Чтобы узнать новые правила, установите OptimizationType кому 'learning'.

options.OptimizationType = 'learning';

Ограничьте максимальное количество правил количеством входных комбинаций MF. Число настроенных правил может быть меньше этого предела, поскольку процесс настройки удаляет повторяющиеся правила.

options.NumMaxRules = numInputMFs^numInputs;

При наличии программного обеспечения Parallel Computing Toolbox™ можно повысить скорость процесса настройки, задав UseParallel кому true. Если у вас нет программного обеспечения Parallel Computing Toolbox, установите UseParallel кому false.

options.UseParallel = false;

Задать максимальное количество итераций как 10. Увеличение числа итераций может уменьшить ошибку обучения. Однако большее число итераций увеличивает продолжительность процесса настройки и может перестраивать параметры правила на данные обучения.

options.MethodOptions.MaxIterations = 10;

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

rng('default')

Настройка FIS с помощью tunefis функция занимает несколько минут. В этом примере включите настройку с помощью параметра runtunefis кому true. Загрузка предварительно подготовленных результатов без выполнения tunefis, можно установить runtunefis кому false.

runtunefis = false;

Настройка FIS с использованием указанных учебных данных и опций.

if runtunefis
    fisout1 = tunefis(fisin,[],trnX,trnY,options);
else
    tunedfis = load('tunedfischaotictimeseriestype2.mat');
    fisout1 = tunedfis.fisout1;
end

Просмотрите структуру обученной FIS, которая содержит новые усвоенные правила.

plotfis(fisout1)

Figure contains 6 axes. Axes 1 contains 6 objects of type line. Axes 2 contains 6 objects of type line. Axes 3 contains 6 objects of type line. Axes 4 contains 6 objects of type line. Axes 5 contains an object of type text. Axes 6 contains 3 objects of type text.

Проверьте индивидуальные отношения «вход-выход», настроенные на основе изученных правил. Например, на следующем рисунке показана взаимосвязь между вторым входом и выходом.

gensurf(fisout1,gensurfOptions('InputIndex',2))

Figure contains an axes. The axes contains an object of type line.

Оцените настроенный FIS с помощью входных данных проверки. Постройте график фактического сгенерированного результата с ожидаемым результатом проверки и вычислите среднеквадратическую ошибку (RMSE).

plotActualAndExpectedResultsWithRMSE(fisout1,vldX,vldY)

Figure contains an axes. The axes with title RMSE = 0.12635 contains 2 objects of type line. These objects represent Actual output, Expected output.

Настройка параметров верхней функции членства

Настройте параметры верхней функции членства. FIS Sugeno типа 2 поддерживает только четкие функции вывода. Поэтому на этом шаге настраиваются входные верхние MF-функции и функции быстрого вывода.

Получение параметров ввода и вывода с помощью getTunableSettings. Поскольку FIS использует треугольные входные MF, можно настроить входные MF с помощью асимметричных значений запаздывания.

[in,out] = getTunableSettings(fisout1,'AsymmetricLag',true);

Деактивизация настройки нижних параметров MF.

for i = 1:length(in)
    for j = 1:length(in(i).MembershipFunctions)
        in(i).MembershipFunctions(j).LowerScale.Free = false;
        in(i).MembershipFunctions(j).LowerLag.Free = false;
    end
end

Чтобы оптимизировать существующие настраиваемые параметры MF при сохранении постоянной базы правил, установите OptimizationType кому 'tuning'.

options.OptimizationType = 'tuning';

Настройте FIS, используя указанные данные настройки и параметры. Загрузка предварительно подготовленных результатов без выполнения tunefis, можно установить runtunefis кому false.

rng('default')
if runtunefis
    fisout2 = tunefis(fisout1,[in;out],trnX,trnY,options);
else
    tunedfis = load('tunedfischaotictimeseriestype2.mat');
    fisout2 = tunedfis.fisout2;
end

Просмотрите структуру обученной FIS, которая теперь содержит настроенные верхние параметры MF.

plotfis(fisout2)

Figure contains 6 axes. Axes 1 contains 6 objects of type line. Axes 2 contains 6 objects of type line. Axes 3 contains 6 objects of type line. Axes 4 contains 6 objects of type line. Axes 5 contains an object of type text. Axes 6 contains 3 objects of type text.

Проанализируйте настроенный FIS с использованием данных проверки, вычислите RMSE и постройте график фактического сгенерированного вывода с ожидаемым выводом проверки.

plotActualAndExpectedResultsWithRMSE(fisout2,vldX,vldY)

Figure contains an axes. The axes with title RMSE = 0.062922 contains 2 objects of type line. These objects represent Actual output, Expected output.

Настройка верхних параметров MF повышает производительность FIS. Этот результат эквивалентен настройке FIS типа 1.

Настройка параметров функции нижнего уровня членства

Настройте только входные нижние параметры MF. Для этого установите настраиваемые значения нижнего масштаба и запаздывания и отключите настройку верхних параметров MF.

for i = 1:length(in)
    for j = 1:length(in(i).MembershipFunctions)
        in(i).MembershipFunctions(j).UpperParameters.Free = false;
        in(i).MembershipFunctions(j).LowerScale.Free = true;
        in(i).MembershipFunctions(j).LowerLag.Free = true;
    end
end

Настройте FIS, используя указанные данные настройки и параметры. Загрузка предварительно подготовленных результатов без выполнения tunefis, можно установить runtunefis кому false.

rng('default')
if runtunefis
    fisout3 = tunefis(fisout2,in,trnX,trnY,options);
else
    tunedfis = load('tunedfischaotictimeseriestype2.mat');
    fisout3 = tunedfis.fisout3;
end

Просмотр структуры обученной FIS, которая теперь содержит настроенные нижние параметры MF.

plotfis(fisout3)

Figure contains 6 axes. Axes 1 contains 6 objects of type line. Axes 2 contains 6 objects of type line. Axes 3 contains 6 objects of type line. Axes 4 contains 6 objects of type line. Axes 5 contains an object of type text. Axes 6 contains 3 objects of type text.

Проанализируйте настроенный FIS с использованием данных проверки, вычислите RMSE и постройте график фактического сгенерированного вывода с ожидаемым выводом проверки.

plotActualAndExpectedResultsWithRMSE(fisout3,vldX,vldY)

Figure contains an axes. The axes with title RMSE = 0.047573 contains 2 objects of type line. These objects represent Actual output, Expected output.

Настройка как верхнего, так и нижнего значений MF повышает производительность FIS. RMSE улучшается, когда обученная FIS включает в себя как настроенные верхние, так и нижние значения параметров.

Заключение

Type-2 MF обеспечивают дополнительные настраиваемые параметры по сравнению с MF типа 1. Поэтому при наличии адекватных учебных данных FIS настроенного типа-2 может лучше соответствовать учебным данным, чем FIS настроенного типа-1.

В целом можно получить различные результаты настройки, изменив любые из следующих свойств FIS или параметров настройки:

  • Количество входов

  • Количество MF

  • Тип MF

  • Метод оптимизации

  • Количество итераций настройки

Локальные функции

function [rmse,actY] = calculateRMSE(fis,x,y)

% Specify options for FIS evaluation
evalOptions = evalfisOptions("EmptyOutputFuzzySetMessage","none", ...
        "NoRuleFiredMessage","none","OutOfRangeInputValueMessage","none");

% Evaluate FIS
actY = evalfis(fis,x,evalOptions);

% Calculate RMSE
del = actY - y;
rmse = sqrt(mean(del.^2));

end

function plotActualAndExpectedResultsWithRMSE(fis,vldX,vldY)
[rmse,actY] = calculateRMSE(fis,vldX,vldY);

figure
plot([actY vldY])
axis([0 length(vldY) min(vldY)-0.01 max(vldY)+0.13])
xlabel('sample index')
ylabel('signal value')
title(['RMSE = ' num2str(rmse)])
legend(["Actual output" "Expected output"],'Location',"northeast")
end

См. также

|

Связанные темы