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

В прогнозе timeseries вы используете известные значения временных рядов до момента времени, , предсказать значение в какой-то момент в будущем, . Стандартный метод для этого типа прогноза состоит в том, чтобы создать отображение из точки выборочных данных, выбранные каждый модули вовремя () к предсказанному будущему значению . После обычных настроек для предсказания временных рядов MG, набора и . Для каждого , входные данные тренировки для anfis являются четырьмя вектор-столбцами следующей формы.
Выходные данные тренировки соответствуют прогнозу траектории.
Для каждого , расположение в значениях от 118 до 1 117, существует 1 000 выборок обучения ввода/вывода. В данном примере используйте первые 500 выборок в качестве данных тренировки (trnData) и вторые 500 значений как проверка данных для валидации (chkData). Каждая строка обучения и проверяющий массивы данных содержит одну точку выборки, где первые четыре столбца содержат четырехмерный вход и пятая колонна содержит вывод .
Создайте обучение и проверяющий массивы данных.
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)

Сгенерированный объект 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 5 0.00275517 0.00271874 Step size increases to 0.011000 after epoch 5. 6 0.00271214 0.00267438 7 0.00266783 0.00262818 8 0.00262626 0.00258435 9 0.00258702 0.00254254 Step size increases to 0.012100 after epoch 9. 10 0.00254972 0.00250247 Designated epoch number reached --> ANFIS training completed at epoch 10. Minimal training RMSE = 0.002550 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')

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