exponenta event banner

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

В этом примере показано, как выполнять хаотическое прогнозирование временных рядов с использованием ANFIS.

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

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

(t) = 0,2x (t-

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

Для получения значения временного ряда в целых точках использовали метод Рунге-Кутты четвертого порядка, чтобы найти численное решение предыдущего уравнения MG. Предполагалось, что x (0) = 1,2, start= 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.

Данные предварительной обработки

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

Построить начальную нечеткую систему

Создайте начальный объект FIS Sugeno для обучения с помощью 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.

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

См. также

| |

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