Предсказание хаотического Timeseries с помощью ANFIS

Этот пример показывает, как сделать хаотическое предсказание timeseries с помощью ANFIS.

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

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

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

Эти временные ряды хаотичны без четко определенного периода. Ряд не сходится и не расходится, и траектория очень чувствительна к начальным условиям. Эта задача бенчмарка используется в нейронной сети и исследовательских сообществах нечеткого моделирования.

Чтобы получить значение временных рядов в целочисленных точках, метод Рунге-Кутты четвертого порядка использовался, чтобы найти численное решение предыдущего уравнения MG. Предполагалось, что x(0)=1.2, τ=17, и x(t)=0 для t<0. Результат был сохранен в файле mgdata.dat.

Загрузите и постройте график временных рядов MG.

load mgdata.dat
time = mgdata(:,1);
x = mgdata(:, 2);
figure(1)
plot(time,x)
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 вы используете известные значения временных рядов до момента во времени, t, чтобы предсказать значение в какой-то момент будущего, t+P. Стандартным методом для этого типа предсказания является создание отображения из D выборочные данные, дискретизированные каждые Δ модулей во времени (x(t-(D-1)Δ),,x(t-Δ),x(t)) к предсказанному будущему значению x=(t+P). Следуя обычным настройкам для предсказания временных рядов MG, установите D=4 и Δ=P=6. Для каждого t, входные обучающие данные для anfis является вектором с четырьмя столбцами следующей формы.

w(t)=[x(t-19),x(t-12),x(t-6),x(t)]

Обучающие данные выходы соответствуют предсказанию траектории.

s(t)=x(t+6)

Для каждого t, в диапазоне значений от 118 до 1117, существует 1000 входных/выходных обучающих выборок. В данном примере используйте первые 500 выборок в качестве обучающих данных (trnData) и вторые 500 значений в качестве проверяющих данных для валидации (chkData). Каждая строка обучающих и проверяющих массивов данных содержит одну точку выборки, где первые четыре столбца содержат четырехмерный вход w и пятый столбец содержит выходы s.

Создайте обучающие и проверяющие массивы данных.

for t = 118:1117 
    Data(t-117,:) = [x(t-18) x(t-12) x(t-6) x(t) x(t+6)]; 
end
trnData = Data(1:500,:);
chkData = Data(501:end,:);

Построение исходной нечеткой системы

Создайте начальный объект Sugeno FIS для обучения с использованием genfis функция с разделением сетки.

fis = genfis(trnData(:,1:end-1),trnData(:,end),...
    genfisOptions('GridPartition'));

Количество входов и выходов FIS соответствует количеству столбцов во входных и выходных обучающих данных, четыре и один, соответственно.

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

figure
subplot(2,2,1)
plotmf(fis,'input',1)
subplot(2,2,2)
plotmf(fis,'input',2)
subplot(2,2,3)
plotmf(fis,'input',3)
subplot(2,2,4)
plotmf(fis,'input',4)

Figure contains 4 axes. Axes 1 contains 4 objects of type line, text. Axes 2 contains 4 objects of type line, text. Axes 3 contains 4 objects of type line, text. Axes 4 contains 4 objects of type line, text.

Сгенерированный объект FIS содержит 24 = 16 нечетких правил с 104 параметрами (24 нелинейных параметра и 80 линейных параметров). Чтобы достичь хорошей возможности обобщения, важно, чтобы количество обучающих точек обучающих данных было в несколько раз больше, чем количество параметров, которые оцениваются. В этом случае отношение между данными и параметрами составляет приблизительно пять (500/104), что является хорошим балансом между параметрами аппроксимации и точками обучающей выборки.

Обучите модель ANFIS

Чтобы сконфигурировать опции обучения, создайте anfisOptions набор опций, указывающий начальные FIS и данные валидации.

options = anfisOptions('InitialFIS',fis,'ValidationData',chkData);

Обучите FIS с помощью заданных обучающих данных и опций.

[fis1,error1,ss,fis2,error2] = anfis(trnData,options);
ANFIS info:
	Number of nodes: 55
	Number of linear parameters: 80
	Number of nonlinear parameters: 24
	Total number of parameters: 104
	Number of training data pairs: 500
	Number of checking data pairs: 500
	Number of fuzzy rules: 16


Start training ANFIS ...

1 	 0.00296046 	 0.00292488
2 	 0.00290346 	 0.0028684
3 	 0.00285048 	 0.00281544
4 	 0.00280117 	 0.00276566
Step size increases to 0.011000 after epoch 5.
5 	 0.00275517 	 0.00271874
6 	 0.00271214 	 0.00267438
7 	 0.00266783 	 0.00262818
8 	 0.00262626 	 0.00258435
Step size increases to 0.012100 after epoch 9.
9 	 0.00258702 	 0.00254254
10 	 0.00254972 	 0.00250247

Designated epoch number reached. ANFIS training completed at epoch 10.

Minimal training RMSE = 0.00254972
Minimal checking RMSE = 0.00250247

fis1 является обученной системой нечеткого вывода для эпохи обучения, где ошибка обучения наименьшая. Поскольку вы задали данные валидации, нечеткая система с минимальной ошибкой проверки, fis2, также возвращается. FIS с наименьшей ошибкой проверки показывает лучшее обобщение за пределами обучающих данных.

Строит графики функций членства для обученной системы.

figure
subplot(2,2,1)
plotmf(fis2,'input',1)
subplot(2,2,2)
plotmf(fis2,'input',2)
subplot(2,2,3)
plotmf(fis2,'input',3)
subplot(2,2,4)
plotmf(fis2,'input',4)

Figure contains 4 axes. Axes 1 contains 4 objects of type line, text. Axes 2 contains 4 objects of type line, text. Axes 3 contains 4 objects of type line, text. Axes 4 contains 4 objects of type line, text.

Графическое изображение кривых ошибок

Постройте график сигналов ошибки обучения и проверки.

figure
plot([error1 error2])
hold on
plot([error1 error2],'o')
legend('Training error','Checking error')
xlabel('Epochs')
ylabel('Root Mean Squared Error')
title('Error Curves')

Figure contains an axes. The axes with title Error Curves contains 4 objects of type line. These objects represent Training error, Checking error.

Ошибка обучения выше, чем ошибка проверки во всех эпох. Это явление не редкость в обучении ANFIS или нелинейной регрессии в целом; это может указать на то, что дополнительная подготовка может привести к лучшим результатам подготовки.

Сравнение исходных и предсказанных рядов

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

anfis_output = evalfis(fis2,[trnData(:,1:4); chkData(:,1:4)]);

figure
index = 125:1124;
plot(time(index),[x(index) anfis_output])
xlabel('Time (sec)')
title('MG Time Series and ANFIS Prediction')

Figure contains an axes. The axes with title MG Time Series and ANFIS Prediction contains 2 objects of type line.

Предсказанный ряд похож на оригинальный ряд.

Вычислите и постройте график ошибки предсказания.

diff = x(index) - anfis_output;
plot(time(index),diff)
xlabel('Time (sec)')
title('Prediction Errors')

Figure contains an axes. The axes with title Prediction Errors contains an object of type line.

Масштаб графика ошибки предсказания составляет около одной сотой шкалы графика timeseries. В этом примере вы обучили систему всего на 10 эпох. Обучение для дополнительных эпох может улучшить результаты обучения.

См. также

| |

Похожие темы