В этом примере показано, как выполнять хаотическое прогнозирование временных рядов с использованием ANFIS.
В этом примере используется anfis предсказать временной ряд, генерируемый следующим дифференциальным уравнением задержки по времени Макки-Гласса (MG).
-
Этот временной ряд хаотичен без четко определенного периода. Серия не сходится и не расходится, а траектория сильно чувствительна к начальным условиям. Эта задача эталона используется в нейросетевых и нечетких моделирующих исследовательских сообществах.
Для получения значения временного ряда в целых точках использовали метод Рунге-Кутты четвертого порядка, чтобы найти численное решение предыдущего уравнения MG. Предполагалось, что 1,217 (t) = для 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)')

При прогнозировании временных рядов используются известные значения временных рядов до момента времени , чтобы предсказать значение в какой-то момент в будущем P. Стандартный метод для этого типа прогнозирования заключается в создании отображения D точек данных выборки, дискретизированных Δ единиц во времени t-Δ), x (t)) к прогнозируемому значению x = (t + P). Следуя обычным установкам для прогнозирования MG, anfis - четырехколонный вектор следующей формы.
t-6), x (t)]
Выходные обучающие данные соответствуют прогнозу траектории.
t + 6)
Для каждого , в диапазоне значений от 118 до 1117, имеется 1000 входных/выходных обучающих выборок. Для этого примера используйте первые 500 образцов в качестве обучающих данных (trnData) и вторые 500 значений в качестве данных проверки для проверки (chkData). Каждая строка массивов обучающих и проверочных данных содержит одну точку выборки, где первые четыре столбца содержат четырехмерный входной w, а пятый столбец содержит выходной .
Создайте обучающие и проверочные массивы данных.
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)

Сгенерированный объект FIS содержит = 16 нечетких правил со 104 параметрами (24 нелинейных параметра и 80 линейных параметров). Для достижения хорошей возможности обобщения важно, чтобы количество точек данных обучения было в несколько раз больше, чем количество оцениваемых параметров. В этом случае соотношение между данными и параметрами составляет приблизительно пять (500/104), что является хорошим балансом между параметрами подгонки и обучающими точками выборки.
Чтобы настроить параметры обучения, создайте 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 plot([error1 error2]) hold on plot([error1 error2],'o') legend('Training error','Checking error') xlabel('Epochs') ylabel('Root Mean Squared Error') title('Error Curves')

Ошибка обучения выше, чем ошибка проверки во всех эпохах. Это явление не редкость в обучении 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')

Предсказанная серия похожа на оригинальную.
Вычислите и постройте график ошибки прогнозирования.
diff = x(index) - anfis_output; plot(time(index),diff) xlabel('Time (sec)') title('Prediction Errors')

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