Дата публикации May 9, 2017
В прошлом году я опубликовалстатья(наPaddleSoftсчет), где я описал прогнозирование потока Kenduskeag с использованием NARX, встроенного в MATLAB. Однако я специально не включил столько технических деталей, которые пытался написать для широкой аудитории. Итак, я создал полное руководство о том, как построить нелинейную авторегрессионную сеть с экзогенным вводом (NARX) в MATLAB для прогнозирования данных временных рядов.
Процесс на самом деле довольно прост: импортируйте данные, создайте модель, обучите модель, а затем сделайте прогноз.
этоCSVпример типа CSV, с которым мы будем работать в этом уроке. По сути, есть три столбца: высота, температура и количество осадков. Мы хотим использовать предыдущую высоту в сочетании с температурой и количеством осадков для прогнозирования текущей высоты.
Сначала мы должны импортировать наши данные. Мы будем использовать простую функцию для этого:
Мы называем эту функцию с[X_input,height]=load_data('height.csv')
(Обратите внимание, что хотя мы используем xlsread, он все равно будет работать с файлами CSV).
2. Обучение
Давайте теперь посмотрим на наш учебный код:
Давайте немного разбить этот код. Первое, что мы должны сделать, это использовать функцию tonndata, чтобы получить наш ввод в массив ячеек. Далее мы должны выбрать нашу функцию обучения. Лично у меня был наибольший успех с байесовской регуляризацией (т.е. trainbr), однако, это, вероятно, займет больше времени. Потом рreparetsподготовит данные в правильном формате для нашего NARX (24).
Параметры задержки ввода и задержки обратной связи очень важны и сильно повлияют на ваши прогнозы. Первоначально я выбрал свой способ - построить график зависимости количества осадков от высоты, чтобы определить, когда ливень больше всего повлиял на высоту потока. Затем я экспериментировал с различными конфигурациями. Есть также более математические способы определить это с помощью взаимной корреляции(см. ответ на форуме MATLAB здесь). Однако сейчас вы можете просто поиграть, чтобы посмотреть, что работает лучше всего.
Затем мы принимаем довольно стандартные решения, такие как обучение / проверка / разделение тестов в строках 28–30, и, наконец, обучаем сеть (строка 30). Остальная часть кода является необязательной, поэтому я не буду вдаваться в подробности. Но не стесняйтесь поиграть и почувствовать, что есть в наличии.
3. Делать прогнозы
Теперь, чтобы сделать наши прогнозы для наших CSV, мы будем использовать наш недавно созданный height_net. Я лично нашел, что проще всего просто разделить тестовые данные на два CSV: один с обоими входами (температура и дождь) и значениями высоты для штампов 0: длина-240, а второй - только с входами для длины-240: длина ( * где длина - это количество строк в нашем тесте CSV). Это примерно соответствует прогнозу для 10-дневного прогноза погоды (то есть с использованием давно известного временного ряда, а затем прогнозирования 10 * 24 штампов, полученных из API погоды). Вы также можете легко разделить данные в самом коде MATLAB, но я считаю, что проще всего сделать это таким образом. Имея это в виду, вот наш код предсказания:
Мы передаем в известной последовательности меток времени воткрытовысота чистая, чтобы получитьxf
а такжеaf
, Затем мы закрываем сеть, чтобы сделать несколько прогнозов (12). Наконец, мы делаем реальные прогнозы (13). Теперь вы можете посмотреть на прогнозы, посмотрев на y2 или unknownY, который мы переназначили.
Я надеюсь, что этого примера достаточно, чтобы намочить ноги при помощи NARX в MATLAB. В будущем я надеюсь больше вникнуть в преимущества NARX по сравнению с другими RNN, такими как LSTM.
Вы можете следить за мной, а также оформить заказPaddleSoftдля большей части моего письма.
© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map