Читайте также:
|
|
С помощью обученной сети можно выполнить так называемую проекцию временного ряда (Time Series Projection). При этом сначала сеть отработает на первых двенадцати входных значениях. В результате будет получен прогноз следующего значения. Затем это спрогнозированное значение вместе с предыдущими одиннадцатью входными значениями снова подается на вход сети, и та опять выдает прогноз очередного значения. Такую проекцию можно повторять произвольное число раз, хотя очевидно, чем дальше, тем хуже будет качество прогноза. Этот прием можно применять только в том случае (и в нашем примере это так), когда значение параметра Горизонт - Lookahead равно единице и входные переменные являются одновременно выходными.
Откройте окно Проекция временного ряда - Time Series Projection одноименной командой меню Run.
Программа ST Neural Networks может начать проекцию временного ряда либо с некоторого места текущего набора данных, либо с блока данных, заданного в окне Прогнать отдельное наблюдение - Run One-off. Мы примем вариант по умолчанию, при котором проекция начинается с первого возможного блока значений (так что прогноз можно будет сравнить со всеми фактическими данными). Здесь же можно указать, какая из выходных переменных (если их несколько) будет изображена на графике (в нашей задаче мы имеем всего одну выходную переменную, так что выбора нет).
Единственный управляющий параметр, который нужно выбрать - это длина проекции (Length). В нашем временном ряду 144 наблюдения, 12 из которых будут фактически удалены при пре-процессировании, поэтому сравнивать результаты можно будет самое большее на 132 шагах. Однако можно проектировать ряд и за границы имеющихся данных, только при этом не с чем будет сравнивать результат.
Установим параметр Длина - Length равным 250 и нажмем кнопку Запуск -Run. Результат окажется весьма разочаровывающим. Хотя на начальном отрезке ряда прогноз сети очень хороший, к концу его он становится все хуже и хуже, и, в конце концов, функция превращается в горизонтальную линию.
Причина этого явления в том, что в выходном слое сети использовалась логистическая функция активации. Она обладает «срезающим» свойством, не позволяющим сети экстраполировать данные. В большинстве случаев это качество весьма полезно, но рассматриваемый временной ряд имеет отчетливый линейный тренд, и прогноз должен его учесть.
Откроем окно Редактор сети - Network Editor (команда Сеть - Network... меню Правка - Edit), выберем третий слой (Layer), введем для параметра Функция активации - Act fn значение Линейная - Linear, и снова обучим сеть. В таком варианте сеть работает гораздо лучше, и проекция получается вполне успешной на много месяцев вперед. И все же, в конце концов, произойдет ее насыщение за счет насыщения логистических функций предыдущих слоев. Область прогноза можно увеличить также с помощью функций окна Пре/пост-процессирование - Pre/Post Processing, изменив значения Мин/средн - Min/Mean и Макс/ст. откл. - Max/SD так, чтобы процедура масштабирования использовала меньшую часть области отклика логистической функции (тем самым оставляя больше возможностей для экстраполяции). Например, можно задать значения Мин/средн - Min/Mean и Макс/ст.откл. - Max/SD [0,4;0,6] для входной переменной и (0,25;0,75) для выходной. Этим мы выжмем из сети немного лучший результат, в то время как более радикальное вмешательство может привести к тому, что восприимчивость сети при обучении уменьшится слишком сильно.
В любом случае слишком далекий прогноз не может быть адекватным -более или менее надежными можно считать цифры прогноза на год или два, а все что дальше - сомнительно. Этот пример показал нам, что не следует бездумно применять сеть в таких ситуациях, где ей потребуется экстраполировать за область известных данных.
Один из возможных выходов здесь состоит в том, чтобы предварительно преобразовать данные к более удобному виду. В нашем примере мы могли бы высказать предположение, что в данных имеется линейный тренд (и сезонные колебания). Тренд можно удалить с помощью линейной модели, а затем для оценки остатка применить какую-то более сложную нейросетевую модель.
Давайте сделаем это. Сначала нужно создать новую сеть и выбрать для нее тип Линейная - Linear. Обучим ее с помощью функции Псевдообратные - Pseudo-Invert окна Радиальная базисная функция - Radial Basis Functions. Вы обнаружите, что эта сеть делает довольно хороший прогноз и разумно проектирует ряд вперед.
Откроем окно Прогнать набор данных - Run Data Set и дадим команду Запуск - Run для всего набора данных. Во втором справа столбце таблицы выходных значений выводится ошибка, то есть разность между ожидаемыми и прогнозируемыми значениями. Выделите этот столбец и клавишами CTRI.+C скопируйте его в буфер обмена. Затем откройте Редактор данных - Data Set Editor, поместите полосу вставки справа от столбца единственной пока переменной и вставьте столбец остатков как новую переменную. Выделите исходную переменную, поменяйте ее тип на Неучитываемая - Ignore и удалите первые 12 наблюдений (для них остатки не определены). Затем с помощью окна Создать сеть - Create Network создайте новую сеть - многослойный персептрон с тремя слоями - и обучите его методом сопряженных градиентов или Левенберга-Маркара чтобы оценить остатки.
Результаты, которые будут выведены в окне Проекция временного ряда -Time Series Projection интерпретировать теперь гораздо труднее. Однако если открыть окно Статистики регрессии - Regression Statistics и нажать кнопку Запуск - Run, можно посмотреть на долю объясненной дисперсии.
У авторов этого текста параметр Отношение ст. откл. - S.D. Ratio получился равным 0,24. т.e. многослойный персептрон на три четверти предсказал остаток ряда. Это означает, что исходный набор данных имел во многом нелинейную структуру. Итак, можно использовать гибридные модели, где сначала строится линейный прогноз, а затем он уточняется путем оценки остатка с применением многослойного персептрона.
ГЛАВА 4
Дата добавления: 2015-11-30; просмотров: 43 | Нарушение авторских прав