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

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

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

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

x˙(t)=0.2x(t-τ)1+x10(t-τ)-0.1x(t)

Симулируйте временные ряды для 1 200 выборок с помощью следующей настройки:

  • 'SampleTime' 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)')

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

Прогноз 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, чтобы предсказать следующее значение.

Создайте 1 000 наборов данных ввода/вывода из выборок 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

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

fisin = sugfistype2;

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

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. Выход содержит постоянные функции принадлежности по умолчанию. Чтобы обеспечить максимальное разрешение для отображения ввода - вывода, определите номер выхода MFs, равного количеству комбинаций входа MF.

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

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

plotfis(fisin)

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

Чтобы настроить FIS, вы используете выполняющий трех шагов.

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

  2. Настройте параметры выхода MF и верхние параметры MF входных параметров при хранении правила и более низких параметров MF постоянными.

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

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

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

Чтобы изучить основу правила, сначала задайте настраивающиеся опции с помощью 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)

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

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

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

plotActualAndExpectedResultsWithRMSE(fisout1,vldX,vldY)

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

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

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

[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)

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

plotActualAndExpectedResultsWithRMSE(fisout2,vldX,vldY)

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

Настройте более низкие параметры функции принадлежности

Настройте только вход более низкие параметры 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)

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

plotActualAndExpectedResultsWithRMSE(fisout3,vldX,vldY)

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

Заключение

Тип 2 MFS обеспечивает дополнительные настраиваемые параметры, как сравнено с MFS типа 1. Поэтому с данными о надлежащей подготовке, настроенный тип 2 FIS может соответствовать обучающим данным лучше, чем настроенный тип 1 FIS.

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

  • Количество входных параметров

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

  • Тип MFS

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

  • Количество настраивающихся итераций

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

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