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

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

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

Этот пример моделирует данные timeseries с использованием следующей формы нелинейного дифференциального уравнения Макки-Стекла (MG).

x˙(t)=0.2x(t-τ)1+x10(t-τ)-0.1x(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

Постройте график моделируемого данного timeseries 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.

Сгенерируйте данные обучения и валидации

Предсказание timeseries использует известные значения timeseries до времени 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), соответственно. Другими словами, используйте четыре последовательных известных значения timeseries для предсказания следующего значения.

Создайте 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 типа. Поскольку Sugeno FIS имеет меньше настраиваемых параметров, чем Mamdani FIS, система Sugeno обычно сходится быстрее во время оптимизации.

fisin = sugfistype2;

Добавьте три входов с тремя функциями треугольного членства (MF) по умолчанию. Первоначально устраните площадь неопределенности (FOU) для каждого входного 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.

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

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

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

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

Отключите настройку параметров нижнего МФ.

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

См. также

|

Похожие темы