ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
( Н И У
« Б е л Г У » )
ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК
КАФЕДРА МАТЕМАТИЧЕСКОГО И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ИНФОРМАЦИОННЫХ СИСТЕМ
Разработка инструментального средства прогнозирования инвестиций
Выпускная квалификационная работа
обучающегося по направлению подготовки
02.04.01. «Математика и компьютерные науки»
очной формы обучения,
группы 07001631
Кофановой Татьяны Владимировны
Научный руководитель
Доцент, кандидат технических
наук, Румбешт В.В.
Рецензент
Доцент, кандидат технических
наук, Зайцева Т.В.
БЕЛГОРОД 2018
содержание
Введение ................................................................................................................... 5
1 Теоретические сведения и постановка задачи .................................................. 7
1.1 Модели прогнозирования ......................................................................... 12
1.2 Обзор моделей прогнозирования ............................................................... 15
1.2.1 Регрессионные модели .......................................................................... 17
1.2.2 Авторегрессионные модели .................................................................. 19
1.2.3 Модели экспоненциального сглаживания ........................................... 22
1.2.4 Нейросетевые модели ............................................................................ 23
1.2.5 Модели на базе цепей Маркова ............................................................ 25
1.2.6 Модели на базе классификационно-регрессионных деревьев .......... 26
1.2.7 Комбинированные модели .................................................................... 27
1.3 Обзор искусственных нейронных сетей .................................................... 29
1.3.1 Классификация нейронных сетей ........................................................ 32
1.3.2 Алгоритмы обучения нейронных сетей............................................... 37
2 Описание средств реализации........................................................................... 42
2.1 Описание методики прогнозирования ....................................................... 44
2.1.1 Поиск и обработка показателей............................................................ 44
2.1.2 Анализ взаимного влияния финансовых показателей ....................... 47
2.1.3 Формирование структуры нейронной сети ......................................... 50
2.1.4 Апробация полученного инструментального средства ..................... 52
2.2 Описание используемых программных продуктов .................................. 53
3 Разработка и тестирование программного средства прогнозирования
инвестиций ............................................................................................................. 55
3.1 Описание разработанного приложения ..................................................... 55
3.2 Тестирование программного средства ....................................................... 60
Заключение ............................................................................................................ 65
Список использованной литературы ................................................................... 67
Приложение 1 ........................................................................................................ 71
3
Приложение 2 ........................................................................................................ 76
4
ВВЕДЕНИЕ
Почти в каждой области встречаются явления, которые интересно и
важно изучать в их развитии и изменении во времени. В повседневной жизни
могут представлять интерес, например, метеорологические условия, цены на
тот или иной товар, те или иные характеристики состояния здоровья
индивидуума и т. д. Все они изменяются во времени. С течением времени
изменяются деловая активность, режим протекания того или иного
производственного процесса, режим жизни человека, восприятие видео и
аудио информации.
Однако, несмотря на такой широкий разброс по сферам применения и
наблюдения, большинство подобных явлений можно представить в виде
временного ряда. Совокупность измерений какой-либо одной характеристики
подобного рода в течение некоторого периода времени представляют собой
временной ряд, а совокупность существующих методов анализа таких рядов
наблюдений называется анализом временных рядов.
Основной чертой, выделяющей анализ временных рядов среди других
видов статистического анализа, является существенность порядка, в котором
производятся
наблюдения.
Если
во
многих
задачах
наблюдения
статистически независимы, то во временных рядах они, как правило,
зависимы, и характер этой зависимости может определяться положением
наблюдений в последовательности. Природа ряда и структура порождающего
ряд
процесса
могут
предопределять
порядок
образования
последовательности.
Цель данной работы заключается в исследовании зависимости между
экономическими и социальными показателями, такими как курсы валют,
цены на нефть, курса Доу-Джонса, ВВП, индекса человеческого развития и
прочих, анализ и обработка полученных данных, структурирование данных в
виде временного ряда. Итогом данной работы является построение на
5
основании данного исследования методики прогнозирования финансовых
показателей при использовании нейронной сети.
Если подавляющее большинство методов прогнозирования стремится к
уменьшению влияния факторов, отражающихся на модели, то для нейронных
сетей такие факторы способствуют улучшению результатов. Главное
условие, чтобы данное влияние было возможно измерить и оценить.
Проектирование
методики
прогнозирования
включает
в
себя:
проведение анализа влияния финансовых показателей друг на друга,
установление значений влияния между финансовыми показателями, анализ
наиболее подходящих методов для решения данной задачи, построение
модели
прогнозирования,
и
разработка
инструментального
средства
инвестиционного прогнозирования.
В ходе достижения общей цели работы решаются следующие задачи:
– изучение методов прогнозирования;
– выбор подходящих для программного решения методов и среды;
– анализ и оценка взаимного влияния выбранных финансовых
показателей.
Работа состоит из трех глав, посвященных отдельным вопросам. В
первой главе освещены основные методы прогнозирования временных рядов,
подробно описана история нейронных сетей. Во второй главе представлено
обоснование выбранных для разработки программных продуктов, описаны
их
достоинства
и
недостатки,
описана
методика
прогнозирования,
разработанная в рамках данной работы. Третья глава содержит описание
функционала
программного
продукта,
а
также
описание
процесса
тестирования и его результаты. Работа содержит 69 страниц, 38 рисунков, 3
таблицы и 2 приложения.
6
1 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ И ПОСТАНОВКА ЗАДАЧИ
Ни для кого не секрет, что предсказание курса валют довольно сложная
задача, т.к. на ее курс влияет множество как экономических, так и
социальных и политических факторов. Также валюты могут иметь
довольную тесную корреляцию между собой, что так же обусловлено
внешними факторами. Однако влияние их не равнозначно, поэтому в задачу
работы входит именно определение наиболее влияющих компонент. К
счастью,
данное
взаимное
влияние
показателей
можно
достоверно
определить благодаря математическому аппарату. И потому что данное
влияние можно измерить, его же можно и учесть при построении модели
прогнозирования.
В рамках данной работы определена основная цель работы – построить
модель прогнозирования, учитывающую взаимное влияние экономических
показателей.
Для
достижения
указанной
цели
необходимо
решить
следующие задачи:
- проведение анализа взаимного влияния показателей;
- построение модели на основе результатов анализа;
- апробация полученной модели;
- подведение итогов о целесообразности полученной модели.
Данные задачи состоят в свою очередь из множества подзадач, что во
многом усложняет первостепенную цель. Однако, при системном подходе к
вопросу, время на решение подобной задачи сокращается. Для решения
вопроса трудоемкости задачи, еѐ решение необходимо формализовать, т.е.
разработать методику прогнозирования для конкретного вида задачи,
использование которой в типовых задачах в дальнейшем способно сократить
время на получение результата.
Однако, прежде чем приступить к реализации поставленных задач
необходимо столкнуться с теоретической стороной работы, а именно
обзором методов прогнозирования.
7
Слово
прогноз
происходит
из
греческого
языка
и
означает
предвидение, предсказание. Прогнозирование – предсказание будущего с
использованием
научных
методов.
Под
процессом
прогнозирования
понимается специфическое научное исследование определенных перспектив
развития процессов. Процессы, перспективы
которых
нуждаются в
предсказании, как правило, описываются посредством временных рядов,
иными словами
последовательностью значений определенных величин,
которые получаются в конкретных моментах времени. Временной ряд
определяется двумя обязательными
элементами, а именно временной
отметкой и значением элемента ряда, который получен каким-либо способом
и соответствует данной отметке времени. Любой временной ряд должен
рассматриваться как выборочная реализация из бесконечного множества
популяций, полученными в результате стохастического процесса, на который
влияют большое количество факторов.
Различают временные ряды по способу определения значения,
временным шагом, памятью и стационарностью.
– интервальные временные ряды,
– моментные временные ряды.
Под
интервальным
временным
рядом
подразумевают
такую
последовательность, где уровень явления относится к результату, который
был накоплен или был вновь произведен за конкретный отрезок времени. К
примеру, интервальным можно назвать временной ряд значений выпуска
продукции предприятием за определенный период времени; либо объем
воды, выпущенной гидроэлектростанцией за какой-либо период времени;
либо объем электроэнергии, выработанной за час, день, месяц и другие.
В случае, если значение временного ряда определяет рассматриваемое
явление в определенный момент времени, то общность данных значений
представляет собой моментный временной ряд. Например, моментными
рядами можно назвать значения динамики финансовых индексов, рыночных
цен
и
индексов;
физические
показатели,
8
к
примеру,
температура
окружающей среды, уровень влажности, давление, измеренные в различные
моменты времени, и прочие.
По частоте определения значений временные ряды подразделяются на
– равноотстоящие временные ряды,
– неравноотстоящие временные ряды.
Равноотстоящие временные ряды образуются путем исследования и
фиксации значений процесса за равные, последовательные отрезки времени.
Большую часть физических процессов принято описывать с помощью
равноотстоящих временных рядов. Под неравноотстоящими временными
рядами подразумеваются такие ряды, для которых не применим принцип
равенства интервалов фиксации значений. Такими рядами можно считать все
биржевые индексы так как данные значения указываются только за рабочие
дни недели.
От
специфики
рассматриваемого
процесса
временные
ряды
подразделяются на
– временные ряды длинной памяти,
– временные ряды короткой памяти.
Под временными рядами с длинной памятью, имеются в виду
временные ряды, автокорреляционная функция которых убывает медленно.
А под временными рядами с короткой памятью понимают те временные
ряды, в которых быстро убывает автокорреляционная функция. Например,
скорость движения транспортного потока, и другие физические процессы,
как, например, расход электроэнергии, температура окружающей среды,
можно отнести к категории временных рядов с длинной памятью. Временные
ряды с короткой памятью представляют собой, например, значения
биржевых индексов.
Также временные ряды подразделяются на:
– стационарные временные ряды,
– нестационарные временные ряды.
9
Стационарным временным рядом является ряд, остающийся в
состоянии равновесия по отношению к постоянному среднему значению.
Прочие временные ряды относят к категории нестационарных. Как правило,
решая задачи прогнозирования, нестационарные временные ряды приводят к
стационарным с использованием разностного оператора.
Временем упреждения можно назвать горизонт времени, на период
которого нужно указать значения временного ряда. По времени упреждения
задачи прогнозирования обычно подразделяются на такие категории
срочности как:
– долгосрочное прогнозирование;
– среднесрочное прогнозирование;
– краткосрочное прогнозирование.
Отметим, что любой временной ряд имеет собственные диапазоны.
Например, для временного ряда цен на акции и котировки классификация
срочности задачи прогнозирования определяется конкретным случаем:
– ультракраткосрочное прогнозирование: до 3 – 4 часа;
– краткосрочное прогнозирование: до 5 – 8 часов;
– среднесрочное прогнозирование: до 16 – 24 часов.
При рассмотрении прогноза временных рядов, следует различать такие
понятия как: модель прогнозирования и метод прогнозирования.
Модель прогнозирования является функциональным отображением,
которое достоверно описывает поведение временного ряда и представляет
собой основу для получения будущих значений процесса. Термин модель
экстраполяции тесно связан с моделями прогнозирования.
Метод прогнозирования включает в себя череду действий, при
выполнении которых выявляется модель прогнозирования для данного
временного ряда. Помимо этого, метод прогнозирования заключает в себе
действия направленные на оценку адекватности значений прогноза.
Построение модели прогнозирования представляет итеративный подход,
который состоит из данных шагов.
10
Шаг 1. Первый шаг заключается в выборе общего класса моделей для
осуществления прогноза временного ряда на указанный горизонт.
Шаг 2. Далее необходимо подогнать к исходному временному ряду,
используя методы определения подклассов моделей. Данные методы
идентификации основаны на качественных оценках временного ряда.
Шаг 3.Затем нужна оценка параметров модели. В том случае, если
модель имеет структуру, или параметры, эту модель следует отнести к типу
структурных моделей. В таком случае, как правило, прибегают к помощи
итеративных способов, т.е. тогда, когда оценивается временной ряд при
наличии различных значений исследуемых величин. Обычно, этот этап
считают наиболее сложным из-за того, что часто при расчетах используют
все доступные значения временного ряда.
Шаг 4. Затем необходимо провести диагностику полученной модели
прогнозирования. Для этого выбирают один или несколько участков
временного ряда, длины которых достаточно проверки прогнозирования и
произведения оценивания точности прогноза. Такие отрезки временного
ряда, отобранные для диагностики называются контрольными участками.
Шаг 5. Модель готова к применению, когда точность прогнозирования
приемлема для задач, где встречаются прогнозные значения. Точность
прогнозирования модели может оказаться недостаточной для дальнейшего
применения значений прогноза, в таком случае требуется итеративное
повторение предыдущих шагов.
Прогнозирование временных рядов подразумевает два возможных
варианта постановки задачи. Согласно первому варианту: для получения
будущих значений исследуемого временного ряда используются доступные
значения только этого ряда. Второй же вариант гласит: для получения
прогнозных значений возможно использование не только фактических
значений искомого ряда, но и значений набора внешних факторов,
представленных в виде временных рядов.
11
Прогнозируя
временной
ряд
важно
найти
функциональную
зависимость, которая достоверно описывает временной ряд, данная
зависимость именуется моделью прогнозирования. Целью создания такой
модели является получении модели, где среднее значение абсолютного
отклонения реального значения от прогнозируемого минимизируется для
указанного горизонта (время упреждения). Затем после определения модели
прогнозирования необходимо просчитать будущие значения временного
ряда, и их доверительный интервал.
1.1 Модели прогнозирования
Одной из задач, поставленных в рамках работы – является построение
модели прогнозирования, в связи с чем, необходимо подробное рассмотрение
подходящих существующих моделей.
В рамках задачи рассматривается прогнозирование без учета внешних
факторов.
Пусть значения временного ряда отмечены в дискретные моменты
времени t = 1,2,...,T. Обозначим временной ряд как Z(t) = Z(1), Z(2),...,Z(T). В
момент времени T необходимо определить значения процесса Z(t) в моменты
времени T+1,...,T+P. Момент времени T называется моментом прогноза, а
величина P — временем упреждения.
1) В процессе вычисления значений временного ряда в будущие
моменты времени необходимо определить функциональную зависимость,
содержащую связь между прошлыми и будущими значениями указанного
ряда
, (1.1)
Зависимость (1.1) называется моделью прогнозирования. Согласно
условиям прогноза, необходимо создать такую модель прогнозирования, для
12
которой
среднее
абсолютное
отклонение
истинного
значения
от
прогнозируемого стремится к минимальному значению для заданного P:
, (1.2)
Выражение (1.1) можно также представить в виде:
, (1.3)
где
– прогнозные значения временного ряда Z(t). Здесь и далее
использование символа «^» означает вычисляемые значения временного
ряда.
2) Помимо получения будущих значений
требуется
определить размер доверительного интервала возможных отклонений
данных значений.
Задача прогнозирования временного ряда проиллюстрирована на рис.
1.1.
Рис. 1.1. Иллюстрация задачи прогнозирования временного ряда без
учета внешних факторов
Концепция
же
прогнозирования
с
учетом
внешних
факторов
заключается в следующем:
Пусть значения исходного временного ряда Z(t) будут доступны в
дискретные моменты времени t = 1,2,...,T. Предполагается, что значения Z(t)
находятся в ощутимой зависимости от набора внешних факторов. Пусть
13
первый внешний фактор X1(t1) доступен в дискретные моменты времени t1 =
1,2,...,T1, второй внешний фактор X2(t2) доступен в моменты времени t2 =
1,2,...,T2 и т.д.
В случае, если дискретность исходного временного ряда и внешних
факторов, а также значения T,T1,...,TS различны, то временные ряды
внешних факторов X1(t1),...,XS(tS) необходимо привести к единой шкале
времени t.
В момент прогноза T необходимо определить будущие значения
исходного процесса Z(t) в моменты времени T+1,...,T+P, учитывая влияние
внешних факторов X1(t),...,XS(t). При этом считаем, что значения внешних
факторов в моменты времени X1(T+1),...,X1(T+P),...,XS(T+1),...,XS(T+P)
являются доступными.
1) В рамках вычисления будущих значений процесса Z(t) в указанные
моменты времени необходимо рассчитать функциональную зависимость,
содержащую связь между прошлыми значениями Z(t) и будущими, а также
отражающую оказанное влияние внешних факторов X1(t),...,XS(t) на
исходный временной ряд
Зависимость (1.4.) называется моделью прогнозирования с учетом
внешних факторов X1(t),...,XS(t). Необходимо разработать такую модель
прогнозирования, в которой среднее абсолютное отклонение истинного
значения от прогнозируемого стремится к минимальному для заданного P (2).
2) Кроме получения будущих значений
необходимо
рассчитать значения доверительного интервала возможных отклонений этих
значений.
Задача прогнозирования временного ряда с учетом одного внешнего
фактора представлена на рис. 1.2.
14
Рис. 1.2. Иллюстрация задачи прогнозирования временного ряда с
учетом внешнего фактора
1.2 Обзор моделей прогнозирования
На сегодняшний день создано более сотни различных классов моделей
прогнозирования. К тому же, часть из этих
классов, моделей и
соответствующих им методов выделяют в качестве самостоятельных
процедур прогнозирования. В то время как, другая часть методов
представляет собой набор отдельных способов, отличающихся от базовых
или от друг друга количеством своеобразных приемов и спецификой их
применения.
В общем случае, методы прогнозирования часто делят на группы:
интуитивные и формализованные.
Использование интуитивного метода прогнозирования правомерно в
случаях, когда в качестве объекта прогнозирования выступает самый
обычный предмет, или же, наоборот, столь неординарный и сложный объект,
что не представляется возможным учесть влияние всех факторов внешней
среды. При использовании интуитивных методов нет необходимости в
построении моделей прогнозирования, так как сами методы основаны на
субъективных экспертных суждениях по поводу хода развития процесса. В
15
качестве
фундамента
для
интуитивных
методов
выступают
профессиональный опыт и наблюдательность. Использование данных
методов справедливо при осуществлении анализа таких процессов, развитие
которых не представляется возможным формализовать с использованием
существующих математических инструментов, проще говоря, для таких
процессов сложно подобрать достоверную модель. К подобным методам
относят: методы экспертных оценок, предвидения по образцу и исторических
аналогий. К счастью, на сегодняшний день широкое распространено
применение
экспертных
систем,
а
также
экспертных
систем
с
использованием нечеткой логики.
В рамках формализованных методов прогнозирования, модели также
можно классифицировать как статистические и структурные модели.
Характерным
признаком
статистических
моделей
является
аналитически определенная функциональная зависимость между текущими и
будущими значениями временного ряда, внешними факторами. Таким
образом, к группам статистических моделей относятся:
– регрессионные модели;
– авторегрессионные модели;
– модели экспоненциального сглаживания.
В то же время, для структурных моделей характерна функциональная
зависимость между текущими и будущими значениями временного ряда, и
внешними факторами определенная структурно, принадлежат следующие
группы:
– нейросетевые модели;
– модели на базе цепей Маркова;
– модели на базе классификационно-регрессионных деревьев.
Однако,
для
решения
узкоспециализированных
задач
иногда
необходимо использование определенных моделей прогнозирования. Так,
например, для задач, связанных с прогнозированием уровня сахара в крови
человека
применяются
модели,
основанные
16
на
дифференциальных
уравнениях. А в задачах прогнозирования потока транспортных средств
обосновано применение гидродинамических моделей. Подобные модели
разрабатываются и применяются для прогнозирования определенных
процессов.
1.2.1 Регрессионные модели
Существует множество задач, требующих изучения взаимного влияния
между двумя и более переменными. Чаще всего для решения подобных задач
применяют регрессионный анализ. На настоящий момент регрессия имеет
широких охват сфер использования, включающий задачи прогнозирования и
управления.
Основной
задачей
регрессионного
анализа
является
установление количественного выражения зависимости между переменной и
внешними
факторами.
Сами
же
коэффициенты
регрессии
могут
рассчитываться с использованием метода наименьших квадратов или метода
максимального правдоподобия.
Линейная регрессионная модель. Самым распространенным видом
регрессионной модели считается линейная регрессия. За основу модели взято
предположение, что существует некий дискретный внешний фактор X(t),
влияющий на заданный процесс Z(t), при этом проявляется линейная
зависимость
между
процессом
и
внешним
фактором.
Модель
прогнозирования описываемая линейной регрессией выражается уравнением
, (1.5.)
где α0 и α1 — коэффициенты регрессии; εt — ошибка модели. Для
получения прогнозных значений Z(t) в момент времени t необходимо иметь
значение X(t) в тот же момент времени t, однако, данное требование сложно
осуществить на практике.
17
Множественная регрессионная модель. На практике на процесс Z(t)
оказывают влияние целый ряд дискретных внешних факторов X1(t),…,XS(t).
Тогда модель прогнозирования имеет вид
, (1.6.)
Главным недостатком указанной модели является то, что для
определения значения процесса Z(t) необходимо точно задать значения для
всех факторов X1(t),…,XS(t) в будущем, что сложно осуществить на
практике.
В основу нелинейной регрессионной модели положено предположение
о том, что существует известная функция, описывающая зависимость между
исходным процессом Z(t) и внешним фактором X(t)
, (1.7.)
В рамках построения модели прогнозирования необходимо определить
параметры функции A. Например, можно предположить, что:
, (1.8.)
В рамках построения модели достаточно задать параметры
.
Недостатком такой модели является то, что на практике, процессы, для
которых заранее известен вид функционального влияния между процессом
Z(t) и внешним фактором X(t) практически не встречаются. В связи с чем,
применение нелинейных регрессионных моделей крайне ограничено.
Модель группового учета аргументов (МГУА) была разработана
Ивахтенко А.Г. Модель имеет вид:
, (1.9.)
Уравнение (1.9) называется опорной функцией. С помощью опорной
функции, задаются разные варианты моделей для некоторых или всех
аргументов. Так, например, строятся полиномы с одной переменной,
полиномы
со
всевозможными
парами
18
переменных,
полиномы
со
всевозможными
тройками
переменных
и
т.д.
Для
каждой
модели
рассчитываются еѐ линейные коэффициенты αi,j,k,... с помощью метода
регрессионного анализа. Из полученных моделей выбираются несколько (от
2 до 10) наиболее эффективных. Так, качество моделей вычисляется с
помощью,
например,
среднеквадратичного
отклонения
или
прочих
критериев. Если во множестве выбранных существует модель, результаты
которой достаточны при использовании полученных прогнозных значений,
то процесс подбора очередных моделей оканчивается. В противном случае
выбранные модели выполняют роль аргументов X1(t),…,XS(t) для опорных
функций на следующем шаге итераций. Таким образом, получается, что
полученные на предыдущих итерациях модели используются в процессе
создания более сложных [42].
1.2.2 Авторегрессионные модели
Самая популярная модель данного класса – ARIMAX.
В основу авторегрессионных моделей легло предположение о том, что
значение процесса Z(t) линейно
зависит от некоторого
множества
предыдущих значений того же процесса Z(t-1),…,Z(t-p).
Авторегрессионная модель скользящего среднего. В области анализа
временных рядов модель авторегрессии (autoregressive, AR) и модель
скользящего среднего (moving average, MA) получили наиболее широкое
применение.
На практике модель авторегрессии проявляет себя крайне полезной для
описания некоторых процессов, встречающихся на практике временных
рядов. В этой модели текущее значение процесса выражается как конечная
линейная совокупность предыдущих значений процесса и импульса, который
называется «белым шумом»,
19
, (1.10.)
С помощью формулы (1.10.) отражен процесс авторегреcсии порядка p,
который в литературных источниках можно встретить как AR(p), здесь C —
вещественная константа, φ1,..,φp — коэффициенты, εt — ошибка модели.
Для определения φi и C используют метод наименьших квадратов или метод
максимального правдоподобия/
Модель скользящего среднего порядка q, также является наиболее
распространенным типом, к тому же имеет большое значение в описании
временных рядов, часто применяется вкупе с авторегрессией и описывается
уравнением:
, (1.11.)
В источниках процесс (1.11) зачастую обозначается как MA(q); здесь q
— порядок скользящего среднего, εt — ошибка прогнозирования. Модель
скользящего среднего в общем понимании представляет собой фильтр
низких частот. Важно понимать, что имеют место простые, взвешенные,
кумулятивные, экспоненциальные модели скользящего среднего.
Для получения наибольшей гибкости в процессе подбора модели часто
необходимо объединить в рамках одной модели авторегрессию и скользящее
среднее. Такая общая модель обозначается ARMA(p,q) и объединяет в себе
фильтр в виде скользящего среднего
порядка q и авторегрессию
фильтрованных значений процесса порядка p.
Если вместо самих значений входных данных временного ряда
используется их разность d-того порядка (на практике d необходимо заранее
вычислять, однако в большинстве случаев d ≤ 2), тополученная модель
именуется авторгерессией проинтегрированного скользящего среднего. В
источниках же данную модель называют ARIMA(p,d,q) (autoregression
integrated moving average).
Эта модель ARIMA(p,d,q) получила развитие в виде
ARIMAX(p,d,q), которая описывается уравнением:
20
модели
, (1.12.)
Здесь α1,...,αS — коэффициенты внешних факторов X1(t),…,XS(t). В
указанной модели чаще всего процесс Z(t) является результатом, полученным
в результате модели MA(q), то есть отфильтрованными значениями
исходного процесса. Далее для прогнозирования Z(t) применяется модель
авторегрессии, в которой обозначены дополнительные значения внешних
факторов X1(t),…,XS(t).
Авторегрессионная
модель
с
условной
гетероскедастичностью
(autoregressive conditional heteroskedasticity, GARCH) была разработана в 1986
году Тимом Петером Борреслевом и представляет собой модель остатков для
модели AR(p). На первом этапе для исходного временного ряда определяется
модель AR(p). Далее выдвигается предположение о том, что ошибка модели
εt делися на две составляющие
, (1.13)
где σt — зависимое от времени стандартное отклонение; ςt — случайная
величина, имеющая нормальное распределение, среднее значение, равное 0, и
стандартное отклонение, равное 1. При этом имеющее зависимость от
времени стандартное отклонение характеризается уравнением
, (1.14)
Здесь β0,...,βq и γ0,..., γp — коэффициенты. Уравнение (1.14)
называется моделью GARCH(p,q) и имеет два параметра: p – описывает
порядок авторегрессии квадратов остатков; под q понимается количество
предшествующих оценок остатков [4].
Наиболее обоснованное применение данная модель нашла в сфере
финансов, где с использованием модели получают значения показателя
волатильности. На сегодняшний день развит целый ряд дополнений модели,
носящих названия NGARCH, IGARCH, EGARCH, GARCH-M и другие.
Авторегрессионнной модели с распределенным лагом (autoregressive
distributed lag models, ARDLM) не уделено достаточного внимания в
21
литературных источниках. Особое внимание данной модели предоставляется
в книгах по эконометрике[11].
Часто при моделировании процессов на изучаемую переменную
влияют не только текущие значения процесса, но и его лаги, то есть значения
временного ряда, предшествующие изучаемому моменту времени. Модель
авторегрессии распределенного лага описывается уравнением:
, (1.15)
Здесь φ0,..., φp — коэффициенты, l — величина лага. Модель (1.15)
называется ARDLM(p,l) и чаще всего применяется для моделирования
экономических процессов.
1.2.3 Модели экспоненциального сглаживания
Модели экспоненциального сглаживания были разработаны в середине
XX века и до сегодняшнего дня не потеряли своей актуальности, имея
широкое распространение за счет их простоты и наглядности.
Модель экспоненциального сглаживания (exponential smoothing, ES)
используется для задач моделирования финансовых и экономических
процессов. Основной идеей экспоненциального сглаживания является
постоянная переоценка существующих прогнозных значений по мере
пребывания новых. В рамках модели ES задаются экспоненциально
убывающие веса значениям наблюдений по мере их старения. Согласно
такому подходу, последние из проведенных наблюдений оказывают большее
влияние на прогнозируемые значения, нежели более ранние.
Функция модели ES имеет вид
, (1.16)
22
где α — коэффициент сглаживания, 0 < α < 1; начальные условия
определяются как S(1) = Z(0). В данной модели каждое последующее
сглаженное значение S(t) является взвешенным средним между предыдущим
значением временного ряда Z(t) и предыдущего сглаженного значения S(t-1)
[7].
Модель
Хольта
или
двойное
экспоненциальное
сглаживание
применяется для моделирования процессов, имеющих тренд. В этом случае в
модели необходимо рассматривать две составляющие: уровень и тренд.
Уровень и тренд сглаживаются отдельно.
Модель Хольта-Винтерса или тройное экспоненциальное сглаживание
применяется
для
процессов,
которые
имеют
тренд
и
сезонную
составляющую.
Модели экспоненциального сглаживания наиболее популярны для
долгосрочного прогнозирования.
1.2.4 Нейросетевые модели
В настоящее время самой популярной среди структурных моделей
является модель на основе искусственных нейронных сетей (artificial neural
network, ANN). Нейронные сети состоят из нейронов (рис. 1.3.).
Рис. 1.3. Схема работы нейронной сети
23
Модель нейрона можно описать парой уравнений:
, (1.17)
где Z(t-1),...,Z(t-m) — входные сигналы; ω1,...,ωm — синаптические
веса нейрона; p — порог; φ(U(t)) — функция активации.
Функция активации бывают трех основных типов:
функция единичного скачка;
кусочно-линейная функция;
сигмоидальная функция.
Способ связи нейронов определяет архитектуру нейронной сети. В
зависимости от способа связи нейронов сети делятся на
однослойные нейронные сети прямого распространения,
многослойные нейронные сети прямого распространения,
рекуррентные нейронные сети.
На рис. 1.4. представлена структура трехслойной нейронной сети
прямого распространения.
Рис. 1.4. Трехслойная нейронная сеть прямого распространения
24
Таким
образом,
при
помощи
нейронных
сетей
возможно
моделирование нелинейной зависимости будущего значения временного ряда
от его фактических значений и от значений внешних факторов. Нелинейная
зависимость определяется структурой сети и функцией активации.
1.2.5 Модели на базе цепей Маркова
Модели прогнозирования на основе цепей Маркова (Markov chain
model) предполагают, что будущее состояние процесса зависит только от его
текущего состояния и не зависит от предыдущих. В связи с этим процессы,
моделируемые цепями Маркова, должны относиться к процессами с
короткой памятью.
Пример цепи Маркова для процесса, имеющего три состояния,
представлен на рис 1.5.
Рис. 1.5. Цепь Маркова с тремя состояниями
Здесь S1,...,X3 — состояния процесса Z(t); λ12 — вероятность перехода
из состояния S1 в состояние S2, λ23 — вероятность перехода из состояния S2
в состояние S3 и т.д. При построении цепи Маркова определяется множество
состояний и вероятности переходов. Есть текущее состояние процесса Si, то
качестве будущего состояния процесса выбирается такое состояние Si,
вероятность перехода в которое (значение λij) максимальна[13].
25
Таким образом, структура цепи Маркова и вероятности перехода
состояний определяют зависимость между будущим значением процесса и
его текущим значением.
1.2.6 Модели на базе классификационно-регрессионных деревьев
Классификационно-регрессионные деревья (classification and regression
trees, CART) являются еще одной популярной структурной моделью
прогнозирования временных рядов. Структурные модели CART разработаны
для моделирования процессов, на которые оказывают влияние как
непрерывные внешние факторы, так и категориальные. Если внешние
факторы, влияющие на процесс Z(t), непрерывны, то используются
регрессионные
деревья;
если
факторы
категориальные,
то
—
классификационные деревья. В случае, если необходимо учитывать факторы
обоих типов, то используются смешанные классификационно-регрессионные
деревья.
Рис. 1.6. Бинарное классификационно-регрессионное дерево
26
Согласно модели CART, прогнозное значение временного ряда зависит
от предыдущих значений, а также некоторых независимых переменных. На
приведенном на рисунке 6 примере сначала предыдущее значение процесса
сравнивается с константой Z0. Если значение Z(t-1) меньше Z0, то
выполняется следующая проверка: X(t) > X11. Если неравенство не
выполняется, то Z(t) = C3, иначе проверки продолжаются до того момента,
пока не будет найден лист дерева, в котором происходит определение
будущего значения процесса Z(t). Важно, что при определении значения в
расчет принимаются как непрерывные переменные, например, X(t), так и
категориальные Y, для которых выполняется проверка присутствия значения
в одном из заранее определенных подмножеств. Значения пороговых
констант, например, Z0, X11, а также подмножеств Y11,Y12 выполняется на
этапе обучения дерева [9].
Таким образом, CART моделирует зависимость будущей величины
процесса Z(t) при помощи структуры дерева, а также пороговых констант и
подмножеств.
1.2.7 Комбинированные модели
Одной из популярных современных тенденций в области создания
моделей прогнозирования является создание комбинированных моделей и
методов. Подобный подход дает возможность компенсировать недостатки
одних моделей при помощи других и направлен на повышение точности
прогнозирования, как одного из главных критериев эффективности модели.
Например, на первом этапе на основании моделей распознавания
образов (pattern recognition) выделяются гомогенные группы (patterns)
временного ряда. На следующем этапе для каждой группы строится
отдельная модель прогнозирования. В статье указывается, что при
27
комбинированном подходе удается повысить точность прогнозирования
временных рядов.
В
работе
предлагается
модель
для
прогнозирования
цен
на
электроэнергию Испании. При помощи вейвлет преобразования (wavelet
transform) доступные значения временного ряда разделяются на несколько
последовательностей, для каждой из которых строится отдельная модель
ARIMA.
В
обзоре
моделей
прогнозирования
энергопотребления
рассматривается следующие типы комбинаций:
нейронные сети + нечеткая логика;
нейронные сети + ARIMA;
нейронные сети + регрессия;
нейронные сети + GA + нечеткая логика;
регрессия + нечеткая логика.
В большинстве комбинаций модели на основе нейронных сетей
применяются для решения задачи кластеризации, а далее для каждого
кластера строиться отдельная модель прогнозирования на основе ARIMA,
GA, нечеткой логики и др. В работе утверждается, что применение
комбинированных моделей, выполняющих предварительную кластеризации
и последующее прогнозирование внутри определенного кластера, является
наиболее перспективным направлением развития моделей прогнозирования.
Использование комбинированных моделей является направлением,
которое
при
корректном
подходе
позволяет
повысить
точность
прогнозирования. Главным недостатком комбинированных моделей является
сложность и ресурсоемкость их разработки: нужно разработать модели таким
образом, чтобы компенсировать недостатки каждой из них, не потеряв
достоинств.
Ряд исследователей пошли по альтернативному пути и разработали
авторегрессионные модели, в основе которых лежит предположение о том,
что временной ряд есть последовательность повторяющихся кластеров
28
(patterns). Однако при этом разработчики не создавали комбинированных
моделей, а определяли кластеры и выполняли прогноз на основании одной
модели. Рассмотрим эти модели подробнее.
Разработчики подобных моделей утверждают, что предложенные
модели просты, прозрачны и эффективны для исследованных временных
рядов. При этом очевидно, что главными недостатками данных моделей
являются:
– невозможность учитывать внешние факторы;
– неоднозначность критерия определения похожей выборки;
– сложность определения эффективной комбинации двух параметров M
(длина векторов) и K (число векторов, принимаемых в расчет) в работах.
Развитие искусственного интеллекта – одна из популярнейших сфер
исследований в программировании. И хотя сама концепция искусственного
интеллекта не является новой, о ней заговорили еще в середине 20 столетия,
однако данная задача до сих пор остается актуальной. Это связано с тем, что
имеющиеся на сегодняшний день достижения трудно назвать истинным
«искусственным интеллектом», к тому же потенциал искусственного
интеллекта невероятно огромен.
1.3 Обзор искусственных нейронных сетей
Касательно искусственных нейронных сетях необходимо разобраться
поподробнее, так как на сегодняшний день искусственные нейронные сети
представляют собой универсальный инструмент.
В 60-80 годах XX века исследователи в сфере искусственного
интеллекта возлагали большие надежда на экспертные системы. Которые, в
свою очередь, раскрыли свой потенциал в узкоспециализированных
областях, но ими и ограничились. Такой результат применения экспертных
29
систем поднял вопрос о создании более гибкой и универсальной
интеллектуальной системы.
Одним из самых результативных направлений в исследовании
искусственного интеллекта являются искусственные нейронные сети. Как
видно из названия, за основу метода взята нервная система человека, а точнее
нейроны и их связи. Нейронная сеть в своем виде появилась как попытка
имитации процессов, происходящих в головном мозге человека, на основе
математической модели.
Нейрон
человека
или
животного
представляет
собой
клетку,
состоящую из ядра, тела клетки и отростков: аксонов и дендритов. Главная
задача нейрона заключается в передаче по отросткам электрического сигнала
связанным с ним нейронам. В месте контакта нейронов межу собой
образуется синапс, а связи характеризуются, в свою очередь, силой
синаптической связи. Значение связи определяет: вызывает ли синапс
деполяризацию (увеличивает сигнал) или гиперполяризацию (затормаживает
сигнал).
При создании искусственной нейронной сети в виде математической
модели был упрощено представлен описанный выше механизм. Таким
образом, сегодня искусственная нейронная сеть представляет собой
структуру связанных нейронов (рис. 1.7.).
В простом виде нейронная сеть представляет собой 3 слоя нейронов.
Первый слой – слой входных нейронов, представляет собой входные данные
для сети. Второй слой – скрытый слой нейронов (скрытых слоев может быть
больше, их количество зависит от сложности задачи), где каждый нейрон
связан с каждым нейроном входного слоя. Третий слой – выходной слой
нейронов, связан с нейронами скрытого слоя. Однако, как и в настоящей
биологической нейронной сети наиболее важная роль отведена связям
нейронов. Так при создании нейронной сети каждой связи задается значение
(вес), а в процессе обучения сети веса корректируются.
30
Рис. 1.7. Схема простой искусственной нейронной сети
Нейрон
осуществляет
нелинейное
преобразование
F
суммы
произведения входных сигналов на весовые коэффициенты (см. рис. 1.7.):
, (1.18)
Где
вектор
-
весовых
коэффициентов,
- вектор входных сигналов,
, (1.19)
-
взвешенная
сумма, F -
оператор
нелинейного
преобразования
или функция активации. Взвешенную сумму S иногда представляют в виде
, (1.20)
гдеT - порог нейронного элемента, характеризующий сдвиг функции
активации по оси абсцисс. Если продолжить биологические аналогии, то
входы xi являются для искусственного нейрона дендритами, операторы
31
суммирования и нелинейного преобразования - телом нейрона, а выход y –
аксоном.
В качестве оператора нелинейного преобразования могут выступать
различные функции, которые выбираются в соответствии с рассматриваемой
задачей и типом НС. Рассмотрим наиболее часто используемые функции
активации.
-Линейная функция:
.
-Пороговая функция
-Сигмоидная
или
функция:
,
где
-
коэффициент,
определяющий ширины функции по оси абсцисс[34].
Следует
отметить,
дифференцируемости
что
в
сигмоидная
силу
монотонности
функция
является
и
всюду
наиболее
распространенной. Ее график приведѐн на рис. 1.8.
Рис. 1.8. Сигмоидная функция активации (c=2)
1.3.1 Классификация нейронных сетей
Существование множества различных видов искусственных нейронных
сетей обусловлено тем, что концепция самой сети заимствована из
природного механизма, привести математическую модель которого довольно
сложно, и получившаяся модель остается спорной, т.к. сам биологический
32
механизм не до конца изучен. Такая ситуация породила множество методов в
построении искусственных нейронных сетей. Исходя из принципов
топологии искусственные нейронные сети можно разделить на:
– слабосвязные (с локальными связями) сети;
– полносвязные сети;
– многослойные или слоистые сети.
Рис. 1.9. – Архитектура слабовязных сетей
Для
архитектуры
слабосвязных
сетей
(рис.
1.9.)
характерно
расположение нейронов в узлах гексогональной и прямоугольной решетки, в
которой каждый нейрон связан несколькими окрестными нейронами.
Количество соседних нейронов зависит от окрестности:
– окрестность фон Неймана – 4 нейрона;
– окрестность Голея – 6 нейронов;
– окрестность Мура – 8 нейронов.
Рисунок 1.10. – Архитектура полносвязных сетей
33
Архитектура полносвязных искусственных нейронных сетей (рис.
1.10.) подразумевает, что нейроны передают входные сигналы друг другу, а
также самому себе. Также все входные сигналы подаются всем нейронам
сети. Все или некоторые выходные сигналы нейронов после какого-то
количества итераций обучения образуют выходные сигналы нейронной сети.
Рис. 1.11. Архитектура многослойных сетей
Для многослойных искусственных нейронных сетей (рис. 1.11.)
характерно объединение нейронов в слои. Слой – это набор нейронов,
имеющих одинаковые сигналы на входе. Не существует зависимости
количества нейронов
на конкретном слое от количества нейронов на
остальных слоях, это значение может быть абсолютно любым. Также не
существует четких правил по расчету количества слоев и количества
нейронов на каждом из слоев.
Общий вид сети таков: сеть содержит Q слоя, каждый из которых
пронумерован (нумерация слева направо). На входы нейронов нулевого
(входного) слоя подаются внешние (входные) сигналы. Выходные сигналы
последнего
из
слоев
представляют
собой
выходы
сети.
Помимо
перечисленных выше входного и выходного слоев многослойная нейронная
сеть содержит хотя бы один скрытый слой, количество скрытых слоев не
ограничено. Связи между соседними слоями, имеющие направление слева
направо, называются последовательными.
34
Многослойные искусственные нейронные сети также подразделяются
на такие типы как:
1.
Монотонные сети – представляют собой особое строение
многослойных сетей, которые содержат дополнительные условия для
нейронов и связей между ними. Так нейроны на входном и скрытых слоях
делятся на возбуждающие и тормозящие. Связи между нейронами также
бывают возбуждающими и тормозящими.
В случае, если от нейронов группы A отходят только возбуждающие
сигналы к группе нейронов B – такое строение ети говорит о том, что каждый
выходной сигнал группы образует неубывающую функцию для каждого
выходного сигнала группы A. В случае, если участвуют только тормозящие
сигналы, то речь идет о невозрастающей функции между группами нейронов.
Таким образом, обеспечивается монотонная зависимость выходного сигнала,
от значений входных сигналов, что и характерно для монотонных сетей.
2.
Сети без обратных связей – представляют собой такие сети, где
на вход нейронов нулевого слоя подаются сигналы, нейроны слоя
преобразуют сигналы и передают на вход нейронов первого скрытого слоя и
такая эстафета продолжается далее до выходного слоя, задачей которого
является передать сигнал для пользователя и интерпретатора. По умолчанию,
каждый выходной сигнал слоя переходит на вход всех нейронов соседнего
(правого) слоя (q+1)-го слоя, но помимо такой реализации, возможен
вариант, когда слой соединяется с произвольным слоем (справа).
Внутри типа многослойных сетей без обратных связей различают
полносвязные сети (выход каждого нейрона слоя связан со входом каждого
нейрона соседнего слоя), а также частично полносвязные сети. Полносвязные
сети
прямого
распространения
(рис.
представителем многослойных сетей.
35
1.12.)
являются
образцовым
Рис. 1.12. Многослойная (двухслойная) сеть прямого распространения
3.
Сети с обратными связями – в данных сетях сигналы
последующих слоев поступают на предыдущие слои. Различают несколько
видов сетей с обратными связями, а именно:
– слоисто-полносвязные – нейронные сети, состоящие из слоев,
каждый из которых – полносвязная сеть, сигналы же передаются между
слоями, также сигналы передаются внутри слоев. Каждый цикл работы слоя
такой сети содержит три периода: получение сигнала с предыдущего слоя,
передача сигналов внутри слоя, формирование и передача сигнала к
последующему слою;
– полносвязно-слоистые – во многом схожие по структуре со слоистополносвязными, однако, отличие заключается в функционировании сети:
циклы работы не разделяются на периоды – в каждом цикле нейроны во всех
слоях обмениваются сигналами и внутри своего слоя и обмен сигналами с
предыдущим и последующим слоев.
– слоисто-циклические – такие сети отличает то, что слои замкнуты,
поэтому последний слой передает выходные сигналы на вход первого слоя.
Каждый слой может и получать и отправлять сигналы.
При классификации искусственных нейронных сетей можно поделить
сети по типам структур на гомогенные и гетерогенные сети. Состав
гомогенных сетей представляет собой нейроны одного типа и единственную
36
функцию активации. Гетерогенная сеть состоит из нейронов и множества
функций активации[39].
По типу входящей информации искусственные нейронные сети можно
поделить на бинарные и аналоговые сети. Бинарные сети выполняют
операции только с двоичными сигналами, поэтому выход каждого нейрона
сети может содержать значение нуля, что обозначает торможение, либо
единицы – возбуждение.
Также существует классификация, которая взяла за основу время
передачи сигнала, по такому критерию сети делятся на синхронные и
асинхронные сети. В синхронных нейронных сетях – состояние меняется у
одного нейрона в момент времени, а в асинхронных – изменение состояние
происходит одновременно у множества нейронов, зачастую затрагивает весь
слой.
1.3.2 Алгоритмы обучения нейронных сетей
Искусственные нейронные сети на данный момент не могут
сымитировать работу мозга, но в рамках конкретной задачи использование
нейронных сетей позволяет достичь положительных результатов. В связи с
чем, искусственные нейронные сети получили широкое распространение.
Так, например, нейронные сети используются в распознавании образов или
интеллектуальном
поиске.
Основным
преимуществом
искусственной
нейронной сети является еѐ обучаемость и способность решать заранее
неизвестные задачи. Однако, у нейронной сети есть и недостаток –
возможность
переобучения,
следствием
чего
является
увеличение
погрешности при решении поставленных задач.
Для
обучения
искусственных
нейронных
сетей
существуют
разнообразные методы. Ввиду того, что эти методы созданы на основе общих
предпосылок, отличия между ними не так много. В целом все методы можно
37
разделить на две основные группы: обучение с учителем и обучение без
учителя.
При
использовании
алгоритмов
вида
«обучение
с
учителем»
существует некий «учитель», который контролирует и корректирует
поведение искусственной нейронной сети: задает входные данные, оценивает
корректность выходных данных, и в случае. Если результирующие данные
далеки от ожидаемых – «учитель» корректирует значения весов сети для
уменьшения
величины
такой
погрешности.
Однако,
такой
подход
противоречит биологическому строению нейронной сети, а так как
искусственная нейронная сеть – это математическая модель настоящей
нейронной сети, то противоречие и отражается на искусственной нейронной
сети, так по крайней мере, считает ряд исследователей.
Алгоритм
обучения
«с
учителем»
нейронной
сети
наглядно
демонстрирует однослойный персептрон (рис. 1.13.)
Рис. 1.13. Алгоритм обучения нейронной сети с учителем
Алгоритм обучения искусственной нейронной сети с учителем можно
разбить на несколько этапов:
1.
Инициализация весов, представленных в виде матрицы (как
правило, веса задаются произвольно).
38
2.
На входы нулевого слоя поступает один из наборов значений,
которые сеть должна научиться определять, вычисляется выходное значение.
3.
В случае, если выходное значение соответствует должному,
осуществляется переход к 4 этапу. В противном случае, вычисляется разницу
между должным
и полученным
значениями:
()
После чего переопределяются веса по приведенной формуле:
,(1.21)
где под t и (t+1) понимаются номера итераций (текущей и следующей);
η – коэффициент скорости обучения; i – номер входа;j – номер нейрона в
слое.
Затем значения весовых коэффициентов корректируется в соответствии
с формулой.
4. Повторение 2 этапа. Повтор осуществляется до тех пор, пока
нейронная сеть не перестанет допускать ошибки.
На втором этапе, в различных итерациях сети задаются все возможные
наборы значений в произвольном порядке. Число итераций при обучении
заранее неизвестно[34].
Алгоритм «обучение без учителя» не имеет принципиальных отличий
от
алгоритма
«обучение
самостоятельным.
Так
с
учителем»,
процедура
однако,
обучения,
является
также
более
сводится
к
корректированию весовых коэффициентов синапсов, однако такая коррекция
проводится на основании информации о самом нейроне: его состоянии и
текущем
весовом
коэффициенте
синапса.
Такой
принцип
наиболее
соответствует изначальной идее о подобии биологической нейронной сети.
Данные принципы и лежат в основе алгоритма обучения Хебба.
Основой сигнального метода обучения Хебба является коррекция
весовых коэффициентов по формуле:
,(1.22)
39
Где yi(q-1) – выходное значение для нейрона i-того слоя (q-1), yj(q) –
выходное значение для нейрона j слоя q; а wij(t) и wij(t-1) – представляют
собой весовые коэффициенты синапса, который соединяет указанные
нейроны на итерациях t и t-1 соответственно; a – обозначает коэффициент
скорости обучения (под q имеется в виду любой слой сети). Обучение сети по
данному алгоритму приводит к усилению связей между нейронами,
находящимися в возбужденном состоянии.
Также существует дифференциальный метод обучения Хебба, при
использовании которого коррекция весов коэффициентов осуществляется по
формуле:
, (1.23.)
Где переменные yi(q-1)(t) и yi(q-1)(t-1) – обозначают выходное значение
для i-того нейрона слоя q-1 на итерациях t и t-1; yj(q)(t) и yj(q)(t-1) – аналогично
по отношению к j-тому нейрону слоя q. Из формулы (2) можно сделать
вывод, что наиболее подвержены обучению те синапсы, которые соединяют
нейроны,
значение
выходного
слоя
которых
наиболее
оперативно
увеличилось.
Алгоритм обучения без учителя, с учетом приведенных выше формул в
общем виде выглядит так:
1.
Инициализация весов, представленных в виде матрицы (как
правило, веса задаются произвольно).
2.
На входы нулевого слоя поступает входной образ, а сигналы
возбуждения передаются по слоям в соответствии с принципом прямого
распространения, который заключается в том, что для каждого нейрона
производится расчет взвешенной суммы его входов, которая затем
пересчитывается
с
учетом
активационной
функции,
результатом
перечисленных манипуляций является выходное значение yi(q), где i = 1,…Lq,
где Lq – число нейронов в слое q; где q= 1, …, Q, а Q– число слоев в сети.
40
3.
К полученным на предыдущем этапе выходным значениям
нейронов применяются формулы (1.22), происходит корректировка весов
нейронов.
4.
значения
Повторение алгоритма с этапа 2 до тех пор, пока выходные
нейронов
не
начнут
стабильно
выводить
результат,
соответствующий заданной точности.
Применение данного способа определения момента завершения
процесса обучения обеспечивает неограниченность корректировки значений
весовых коэффициентов.
В данной главе приведены и описаны некоторые из возможных
методов решения поставленной задачи. Приведены классификации моделей
прогнозирования и архитектур нейронных сетей. Описаны используемые
алгоритмы.
41
2 ОПИСАНИЕ СРЕДСТВ РЕАЛИЗАЦИИ
Инвестиции всегда были самым привлекательным способом получения
финансовой выгоды, т.к. вложение инвестиций не требует больших
временных и физических усилий. Такой метод получения всегда находит
своего пользователя. Но инвестирование сопряжено с большими рисками,
т.к. финансовые показатели не проявляют большой стабильности. В
попытках уменьшить неопределенность появились прогнозы во всем
многообразии своих методов.
Главным инвестиционным объектом на сегодняшний день являются
акции, котировки, валюта, драгоценные металлы и прочее. Вопросом
прогнозирования данных показателей задаются многие люди. В настоящее
время
существуют
довольно
результативные
программные
решения,
позволяющие получить прогноз для выбранного показателя. Однако, данный
вопрос не закрыт, т.к. не существует способа, формирующего абсолютно
точный прогноз. Поэтому пока погрешность прогнозирования не станет
равна нулю, прогнозирование останется актуальной проблемой.
Для решения задачи прогнозирования существуют стандартные и
довольно эффективные методы, а именно такие группы методов как
фактографические
и
экспертные
методы.
Фактографические
методы
отличаются тем, что данные методы основаны на анализе и использовании
объективных данных, в основе которых лежит математический анализ и
построение моделей. К фактографическим методам относятся: многомерные
регрессионные методы, эконометрические методы и метод компьютерной
имитации. Важной характеристикой экспертных методов является наличие
человеческого фактора, а именно так называемых «экспертов». Среди
экспертных методов можно отметить метод Дельфи (метод экспертных
оценок), метод консенсуса и историческая аналогия. Данные методы
достаточно эффективны, но имеют значительные недостатки. Например,
фактографические методы требуют большой объем исходных данных, а
42
также требуют громадных затрат времени на проведения анализа, построение
моделей и прочее. Экспертные методы не требуют столь значительного
объема данных как фактографические, однако использование данных
подходов
требует
наличие
некоторого
количества
«экспертов»
и
использование данных методов становится невозможным для маленьких
компаний (затруднительным для средних), а также для отдельных индивидов.
Существуют
смешанные
методы
прогнозирования,
сочетающие
экспертное суждение и математические модели. Данные методы были
созданы в попытке устранить недостатки обоих подходов и увеличить
эффективность прогнозирования.
В данной работе описана методика прогнозирования, основанная в
большей части на основании фактографического подхода, так как входные
данные
подвергаются
математических
обработке
методов,
в
и
процессе
структуризации
обработки
с
исходные
помощью
данные
представляются в виде временного ряда для дальнейшего удобства работы с
ними. Также методика включает в себя использование нейронной сети,
использующая опыт, полученный в результате обучения сети: веса нейронов,
входящих в структуру нейронной сети рассчитываются на основании
большого потока данных. В каком-то смысле нейронная сеть выступает в
роли «эксперта» в рамках данной методики.
Главной причиной представления данных в виде временного ряда в
данной методике является тот факт, что курс любой котировки тесно
привязан не только к значению, но и ко времени, таким образом, значение
курса доллара равное к «28.77» не может быть полезной информацией, так
как не обладает второй по важности характеристикой времени. Однако, даже
если внести ясность и указать, что данное значение курс доллара имел в
период с 12 по 15 февраля 2000 года, останется еще один важный вопрос: по
отношению к какой валюте: рублю, гривне, йене? Стоит заметить, что не по
отношению к разным валютам определенный показатель ведет себя поразному. Экономические котировки и показатели чаще всего имеют крайне
43
сложную зависимость, а иногда не имеют ее вовсе. Изучение такой разности
в зависимости между показателями и будет описана в методике ниже.
2.1 Описание методики прогнозирования
Для осуществления краткосрочного прогнозирования в сфере финансов
недостаточно лишь выбрать подходящую модель прогнозирования и
применить ее на определенном наборе значений. Необходимо разработать
структурированный и обоснованный подход к проблеме – методику
прогнозирования.
В рамках данной задачи была сформирована методика, приведенная
ниже. Однако, стоит отметить, что данная методика имеет примерный
характер для остальных задач, так как предназначена указанная методика
только для решения конкретной задачи.
Разработанная методика состоит из четырех частей: сбор данных,
подготовка
данных
(формирование
временного
ряда),
формирование
структуры нейронной сети и тестирование. Первый и второй этап носят
исключительно подготовительный характер, третий и четвертый наиболее
подробно описаны в 3 разделе работы. Суть подготовительной части
методики состоит в том, что необходимо было подобрать несколько
различных экономических показателей и оценить их взаимное влияние с
предсказываемым показателем, а также привести подходящие показатели к
виду временного ряда.
2.1.1 Поиск и обработка показателей
44
Первый этап методики – один из самых важных аспектов этапов
подготовки. Необходимо было решить несколько проблем на этом этапе:
поиск показателей и выбор наиболее подходящих для анализа, анализ
показателей для определения самых зависимых показателей.
Для поиска показателей были использованы различные источники,
были исследованы различные показатели: валюты и котировки. Однако,
после подэтапа поиска показателей оказалось значительно меньше. Самой
главной проблемой поиска оказалось то, что значения котировок и валют
зависят от работы биржевых рынков, у которых также имеются выходные и
праздничные дни. И если выходные дни у них совпадают, то праздничные
дни в разных странах отличаются, таким образом, количество значений для
каждого показателя за один период времени может сильно варьироваться.
Поэтому на данном этапе были отвергнуты многие показатели, у которых
отсутствовало
больше
чем
30%
показателей
по
сравнению
с
предсказываемым показателем. Таких показателей было достаточно много,
так у многих валют отсутствовала значительная часть показателей,
возможно, такая проблема обусловлена тем, что в некоторых государствах
подобная статистика не ведется в достаточном объеме.
Как было отмечено раньше выходные дни для биржевых рынков
разнятся для большинства стран, в связи с чем, не для каждого рабочего дня
можно определить значение всех показателей. В таком случае, необходимо
устранить несоответствие значений друг другу, у данной проблемы
несколько
решений:
во-первых,
можно
дополнить
ряд
значений,
продублировав предыдущие значения, во-вторых, можно устранить те
данные, которые не имеют соответствий, т.е. если в строчке нет хотя бы
одного значения – удалять весь набор данных за этот день. Оба варианта
приемлемы, однако, у обоих имеются недостатки и преимущества. Так с
помощью первого варианта, возможно, максимально приблизиться к
представлению данных в виде временного ряда, так как данные за
определенный
период
времени
предоставляются
45
с
одинаковой
периодичностью (каждый день). То есть дополнить данными необходимо не
только праздничные дни, но и выходные дни. Недостатком такого подхода
является то, что при тестировании и использовании в наборе данных для
прогноза также необходимо дополнить данные. Преимуществом второго
варианта
является
наиболее
высокое
значение
корреляции
между
показателями, так как отсутствуют дубли значений, к недостаткам метода
можно отнести то, что предоставление данных удалено от концепции
временного ряда.
В результате, для снижения недостатков обоих вариантов, было решено
использовать их смешение, так ряды были дополнены только на праздничные
дни.
Рис.2.1. Дополненные значения показателей (дополненные строки
выделены цветом)
46
2.1.2 Анализ взаимного влияния финансовых показателей
После того как были отобраны данные этап сбора данных завершился.
Однако, лишь одних данных недостаточно, так как в дальнейших этапах
прогнозирования необходимо учитывать только те данные, которые
оказывают наибольшее влияние на прогнозируемый показатель. Второй этап
методики заключается в преобразовании данных, собранных на первом этапе.
Осуществление анализа взаимного влияния финансовых показателей –
важный этап для данной работы, важность заключается в том, что нельзя
просто заявить, что показатели влияют друг на друга. Основная задача
анализа – определить наиболее влияющие друг на друга показатели.
Использование тесной взаимосвязи показателей в прогнозировании может
привести к уменьшению ошибки прогноза, что и является главной задачей
прогнозирования.
Важным моментом второго этапа является определение взаимосвязи
показателей, а именно определении корреляции. Современная статистика
предоставляет несколько различных способов для определения корреляции:
- «коэффициент корреляции Пирсона» используется для определения
линейной зависимости между двумя показателями;
- «коэффициент корреляции Кендела», «коэффициент корреляции
Спирмена»,
«коэффициент
корреляции
Фехнера»
применяются
для
определения линейной или нелинейной зависимости между случайными
величинами, относятся к коэффициентам корреляции знаков;
Так как показатели в данной работе всегда имеют лишь положительные
значения, при определении корреляции (взаимного влияния) показателей
будет применяться коэффициент Пирсона.
Для анализа были взяты курсы валют государств, экономическая
деятельность оказывает наибольшее воздействие на мировую экономику. Для
анализа также использовались цены на драгоценные металлы, нефть (Brent) и
47
значения индексов ИДД (Индекс Доу-Джонса), РТС (российский фондовый
индекс).
Рис.2.2. Рассматриваемые значения показателей
Однако, данные, представленные на рис. 2.2., без дальнейшей
обработки могут стать причиной погрешности в результатах, т.к. различные
показатели находятся в разных числовых диапазонах. Для того, чтобы
избежать подобных ошибок, необходимо прибегнуть к нормализации данных
(рис. 2.3.), т.е. привести значение ряда к интервалу [0, 1].
Следующий шаг – рассчитать коэффициент корреляции между
значениями.
Корреляция — статистическая взаимосвязь двух или более случайных
величин (либо величин, которые можно в некоторой допустимой степени
точности считать таковыми).
48
Рис. 2.3. Нормализованные значения
Коэффициент корреляции Пирсона рассчитывается по формуле:
(2.1)
где
– две выборки,
,
выборочные средние,
–
.
Таблица 2.1
Корреляция показателей по отношению к курсу доллара
Показатель
Золото
Палладий
Серебро
Алюминий
Платина
Евро
ИДД
РТС
Brent
Фунт
Юань
Вона
Коэффициент
корреляции
0,75443129
-0,567541
0,33509102
-0,8606588
0,67092738
0,97462993
-0,9233111
-0,9237439
-0,9015729
0,94775356
0,98978624
0,95513638
49
Как видно из таблицы 2.1, значения курса доллара в наибольшей
степени связаны с курсом китайского юаня, евро и корейской воны.
Итоги, полученные
в
результате
данного
анализа, имеют
не
игнорируемое значение, т.к. такая тесная взаимосвязь между величинами
должна быть учтена в краткосрочном прогнозировании.
2.1.3 Формирование структуры нейронной сети
Как уже отмечалось ранее, нейронная сеть имеет определенное
строение, однако, наиболее важным структурным элементом нейронной сети
является скрытый слой или слои (в зависимости от сложности задачи).
Скрытый слой также состоит из нейронов, как и входной и выходной слои,
однако, если количество нейронов во внешних слоях довольно легко
определить исходя из постановки задачи, то определение количества
нейронов на скрытых слоях представляет собой наиболее неоднозначный и
творческий процесс. Самой большой проблемой является тот факт, что на
настоящее
время
не
существует
строго
определенных
правил
для
определения количества нейронов на скрытых слоях, а имеющиеся правила
носят скорее рекомендательный характер. Самым распространенным
правилом для определения количества нейронов в скрытых слоях является
правило «геометрической пирамиды», при использовании данного правила
количество нейронов для сети с одним скрытым слоем рассчитывается как:
, где k – количество нейронов скрытого слоя, а n и m –
количество нейронов для входного и выходного слоев соответственно.
При построении нейронной сети с двумя скрытыми слоями, при
определении
количества
нейронов
используется следующим образом:
50
скрытых
слоев
данное
правило
,
где k1 и k2 – это число нейронов первого и второго скрытого слоя
соответственно.
Впрочем, задачи, решаемые с помощью нейронных сетей, невероятно
разнятся,
поэтому
приведенные
выше
формулы
скорее
являются
рекомендацией для определения числа нейронов, так как большинство
выбирает наиболее трудоемкий процесс при определении числа нейронов:
начиная с одного нейрона, добавлять по одному нейрону на скрытый слой
или слои до тех пор, пока полученный результат не будет достаточно
точным.
Рис. 2.4. Пример правильно обученной сети
Важно точно определить количество нейронов, так как их большее
количество может привести к переобучению сети. Переобучение сети
(рис.2.5.) столь же вредит результату, как и недообучение, которые и
являются главными проблемами всех нейронных сетей.
Рис. 2.5. Пример переобученной (недообученной) сети
Проблема переобучения решается все так же методом подбора
количества нейронов на скрытых слоях.
Для определения количества нейронов скрытого слоя в данной работе
было решено использовать метод перебора значений количества нейронов.
51
Так как основной минус данного подхода – это его трудоемкость, то решение
данной проблемы необходимо реализовать на программном уровне, на
стадии обучения нейронной сети.
2.1.4 Апробация полученного инструментального средства
Тестирование или апробация полученной модели – самый простой на
первый взгляд этап представленной методики, однако, это не так.
Тестирование программного продукта со стороны визуальной выглядит
довольно простым, но тестирование программного продукта лишь итог
самого этапа апробации. Главнейшей задачей является выбор наиболее
подходящих
наборов
данных
для
тестирования.
Соответственно,
тестирование программного средства, представленное в разделе 3, не
является первым тестированием программного продукта, оно итоговое –
показательное. Для тестирования же программного продукта необходимо
проведение множества тестов. В самом первом варианте было необходимо
оценить степень обученности нейронной сети, таким образом, на данном
этапе был использованы данные обучающей выборки, таких тестов было
очень много, т.к. необходимо было проверить весь массив обучающей
выборки, то есть для тестирования используется каждый набор значений.
Однако, несмотря на полноту такого подхода, он требует значительных
временных затрат, поэтому для тестирования использовались выборки с
самыми наименьшими значениями (в выборке эти значения характеризуются
нулем) и выборки с наибольшими (в выборке эти значения характеризуются
единицей). Данные значения первостепенны, т.к. являются наиболее редкими
наборами значений для всей выборки. Помимо приведенных выборок для
тестирования использовались произвольные наборы значений (равномерно
по всей обучающей выборке).
52
Затем необходимо тестирование на данных, не включенных в выборку,
однако, до того как провести тестирование – необходимо убедиться, что
данные не содержатся в выборке, это обусловлено спецификой задачи, так
как, текущие данные могут совпадать с данными другого года. Данное
совпадение довольно редко, однако, для всех наборов тестирования данная
проверка была необходима для получения достоверных данных о работе
полученного приложения.
2.2 Описание используемых программных продуктов
На начальном этапе в работе был использован программный продукт
Microsoft Excel, являющийся стандартным программным продуктом. Excel –
это программное средство для работы с электронными таблицами, оно также
имеет набор стандартных функций для работы с различными данными, а
также некоторые аналитические инструменты. Потребность в данном
продукте возникла в связи с необходимостью использования статистических
и
экономических
рассматривался
функций.
программный
В
качестве
продукт
альтернативного
Statistica,
имеющий
варианта
схожий
функционал, но обладающий большим потенциалом при работе со
статистическими данными. Но конечный выбор пал на Microsoft Excel, такой
выбор обусловлен тем, что интерфейс данного программного обеспечения
крайне прост, возможна работа с большими массивами однотипных данных,
к
тому
же
мелкие
стандартные
функции
позволяют
использовать
программный продукт за пределами его основного назначения. Недостатком
же продукта можно считать недостаточную точность расчетов, особенно в
отношении встроенных функций, результат вычислений, полученный с
использованием которых разнится с расчетами по формулам вручную.
53
Для реализации самой нейронной сети была выбрана среда разработки
Microsoft Visual Studio. Выбор на данную среду разработки пал в основном
благодаря тому, что для реализации данной работы был выбран язык
программирования С++. Однако, приведенная причина не была единственной
– на сегодняшний день среда Microsoft Visual Studio представляет наиболее
широкие возможности для разработки, так, например, при использовании
среды возможно найти необходимую библиотеку в сети Интернет не выходя
из приложения. Основным достоинством среды является возможность
работы с различными библиотеками (в частности fann-библиотекой). К тому
же данную среду поддерживают ее разработчики (актуальные версии), что
препятствует возникновению ошибок среды при отладке кода. Очевидным
преимуществом также является удобный интерфейс. К недостаткам же
можно отнести сложность интерфейса, так поиск необходимого пункта меню
отнимает много времени.
В данной главе рассмотрены программные продукты и средства, с
помощью которых было реализовано программное средство. Приведены
преимущества и недостатки выбранных программных средств.
Приведено
подробное
описание
разработанной
методики
прогнозирования, а именно приведен анализ взаимного влияния показателей
(курсов и котировок), описаны этапы формирования структуры нейронной
сети и апробации полученной модели прогнозирования.
54
3 РАЗРАБОТКА И ТЕСТИРОВАНИЕ ПРОГРАММНОГО
СРЕДСТВА ПРОГНОЗИРОВАНИЯ ИНВЕСТИЦИЙ
3.1 Описание разработанного приложения
Исходя и различных целей, методы прогнозирования делятся по
периоду применения на: краткосрочные, среднесрочные и долгосрочные
прогнозы. Однако, использование нейронной сети позволяет осуществлять
любые виды прогнозирования, но, важно отметить, что выбранная специфика
накладывает
ограничение
на
использование
нейронной
сети,
т.к.
долгосрочный и среднесрочный прогноз финансовых показателей носят
более статистический характер, нежели точное предсказание. Наиболее
эффективным является краткосрочный прогноз.
Разработанный программный продукт предоставляет пользователю
возможность получить краткосрочный прогноз (зависит от обучающей
выборки) будущих значений курса доллара. Описание интерфейса приведено
на рис.3.1.:
Рис. 3.1. Структура приложения
55
Как можно увидеть из рис. 3.1. – приложение имеет простую
структуру. Однако, такое строение обусловлено задачей программного
продукта – получение прогноза. Прогноз представляется в трех вариантах:
предсказание на основе значений курса доллара, прогноз на основе значений
курса доллара, коррелированного по отношению к курсу юаня/ евро.
Рис. 3.2. Интерфейс программного продукта
На рис. 3.2. приведен интерфейс главной формы приложения. Так
пользователю необходимо выбрать одно из значений:
– по курсу доллара;
– по курсу доллара и юаня;
– по курсу доллара и евро.
Затем нажать кнопку «Рассчитать». Затем откроется соответствующее
выбору окно (рис. 3.3).
56
Рис. 3.3. Окно приложения «По доллару»
При переходе в данную форму (рис. 3.3.) необходимо последовательно
выполнить следующие действия:
– нажать кнопку «Обучить сеть»;
– подождать пока появится надпись «Обучение завершено» (обучение
может занять длительное время);
– ввести значения курса доллара;
– нажать кнопку «Предсказать».
В поле должно отобразиться полученное значение прогноза.
Описанные выше действия совершает пользователь, однако для
приложения
функционирование
отличается.
Работа
приложения
при
выполнении описанных выше действий отражена на рисунке 3.4.
Аналогичная работа, как со стороны приложения, так и со стороны
пользователя, осуществляется на остальных формах: «по доллару и юаню»,
«по доллару и евро»
57
Рис. 3.4. Работа с приложением в окне «По доллару»
Самая важная часть работы программного продукта – обучение
искусственной нейронной сети. Обучение искусственной нейронной сети
производится по алгоритму «без учителя» на основе выборки данных. Схема
процесса обучения представлена на рис. 3.5.:
Рис. 3.5. Схема обучения нейронной сети
58
Процесс обучения нейронной сети во многом зависит от обучающей
выборки, а именно количества входных нейронов и количества наборов
входных данных. Обучающая выборка для нейронной сети окна «По
доллару» представлена на рис. 3.6.
Представленные в выборке данные – нормализованные значения
показателя доллара. Первая строка содержит три числа, описывающих
выборку: первое число – количество наборов входных данных, второе число
– количество входов сети, третье число – количество выходов сети. В случае,
если необходимо обучить сеть на меньшем объеме данных не обязательно
менять файл выборки – достаточно уменьшить первое число. В случае, если
нейронная сеть успешно обучается – созданная сеть сохраняется в файл.
Возвращаясь к главной форме, на ней к тому же размещена кнопка
«Использовать
сеть»,
ее
функционал
аналогичен
нажатию
кнопки
«Рассчитать».
Открывшаяся форма также похожа на формы обучения (рис. 3.7.).
Однако есть существенные различия.
Рис. 3.6. Обучающая выборка
Прогноз, осуществляемый на форме, не намного отличается от
описанных выше форм, однако, занимает меньше времени, т.к. использует
уже готовую (обученную) нейронную сеть.
59
Для работы с окном необходимо нажать кнопку «Использовать сеть»,
ввести данные и нажать кнопку «Предсказать», которая станет доступной
после нажатия кнопки «Использовать сеть».
Рис. 3.7. Окно использования готовой нейронной сети
Итак,
можно
заключить,
что
использование
разработанного
программного приложения не составляет труда, т.к. на формах расположен
минимум объектов, не позволяющих пользователю теряться при работе.
Использование неактивных кнопок (которые неактивны до тех пор, пока в
них не возникнет необходимость) также облегчает ориентацию в формах.
3.2 Тестирование программного средства
Тестирование готового приложения – один из важнейших этапов при
разработке
программного
обеспечения,
т.к.
тестирование
позволяет
определить – соответствует ли программа заданным к ней требованиям.
Предпочтительным является системный подход к тестированию, т.к.
результат зависит не от особенностей самого тестирования, а от работы
системы.
60
Для начала необходимо определить наборы входных данных для
тестирования системы. К ним предъявляются следующие требования:
– наборы данных не должны входить в обучающую выборку;
– наборы данных должны содержать значения за соответствующий
период.
Таблица 3.1
Тестовые выборки данных
№
1
выборка
2
выборка
3
выборка
4
выборка
5
выборка
доллар
юань
евро
результат
70,8295
10,9609
78,2312
70,2244
10,8717
76,9659
69,1755
10,7161
75,7472
69,2151
10,7504
76,0674
67,7691
69,2
10,7652
75,5595
69,3026
10,7983
75,3111
68,5156
10,6915
74,4079
67,6698
10,5693
73,6721
69,1755
10,7161
75,7472
69,2151
10,7504
76,0674
69,2
10,7652
75,5595
69,3026
10,7983
75,3111
68,5156
10,6915
74,4079
67,6698
10,5693
73,6721
67,7691
10,5922
71,7404
66,7402
10,4301
70,8647 66,2584
70,2244
10,8717
76,9659
69,1755
10,7161
75,7472
69,2151
10,7504
76,0674
69,2
10,7652
75,5595
69,3026
10,7983
75,3111
68,5156
10,6915
74,4079
67,6698
10,5693
73,6721
67,7691
10,5922
71,7404 66,7402
69,2151
10,7504
76,0674
69,2
10,7652
75,5595
69,3026
10,7983
75,3111
68,5156
10,6915
74,4079
67,6698
10,5693
73,6721
67,7691
10,5922
71,7404
66,7402
10,4301
70,8647
66,2584
10,355
70,1345
66,737
69,2
10,7652
75,5595
69,3026
10,7983
75,3111
66,588
61
68,5156
67,6698
67,7691
66,7402
66,2584
66,737
10,6915
10,5693
10,5922
10,4301
10,355
10,4306
74,4079
73,6721
71,7404
70,8647
70,1345
70,6478
Для достижения наиболее достоверного результата необходимо
тестировать каждый набор данных на каждой нейронной сети.
Результат тестирования на наборе данных 1 для предсказания по
значению показателя доллара представлен на рис. 3.8.
Рис. 3.8. Тестирование на выборке 1, окно «по доллару»
Результат тестирования на наборе данных 1 для предсказания по
значению показателей доллара и юаня представлен на рис. 3.9.
Рис. 3.9. Тестирование на выборке 1, окно «по доллару и юаню»
62
Результат тестирования на наборе данных 1 для предсказания по
значению показателей доллара и евро представлен на рис. 3.10.
Рис. 3.10. Тестирование на выборке 1, окно «по доллару и евро»
Результаты тестирования приведены в таблице 3.2 и приложении 1.
Таблица 3.2
Результаты тестирования
выборка 1
выборка 2
выборка 3
выборка 4
выборка 5
средняя
погрешность
эталон
67,7691
66,2584
66,7402
66,737
66,588
результат
66,6938
66,2491
66,816
66,8137
66,7122
66,6975
66,2613
66,6349
66,8
66,5208
66,79
66,2874
66,67
66,6808
66,4592
погрешнос 1,5867113
0,0141868
0,1135747
0,1149287
0,1865200
ть 1
8
27
5
94
погрешнос 1,5812516
0,0043768
0,1577759
0,0944004
0,1009190
ть 2
04
73
08
85
погрешнос 1,4447587
0,0437680
0,1051839
0,0842111
0,1934282
ть 3
35
82
57
45
1
результат
2
результат
3
48
32
47
63
0,40318436
0,38774478
0,374270033
Из значений таблицы можно заключить, что результаты, полученные
при тестировании нейронных сетей, использующих корреляцию при
обучении, ненамного превзошли результаты тестирования нейронной сети №
1. Из чего можно заключить, что, несмотря на скромные результаты,
дальнейшее исследование в данной сфере может привести к лучшим
результатам.
Таким образом, третья глава посвящена разработке структуры
нейронной сети и тестированию полученного программного продукта,
оценке погрешностей, возникших при тестировании и расчет средней
погрешности. Также приведено обоснование по поводу потенциала данного
метода
64
ЗАКЛЮЧЕНИЕ
Главным инвестиционным объектом на сегодняшний день являются
акции, котировки, валюта, драгоценные металлы и прочее. Вопросом
прогнозирования данных показателей задаются многие люди. В настоящее
время
существуют
довольно
результативные
программные
решения,
позволяющие получить прогноз для выбранного показателя. Однако, данный
вопрос далек от закрытия закрыт, так как способа, способного дать
абсолютно точный прогноз не существует, поэтому задача прогнозирования
инвестиций заключается в следующем – уменьшение погрешности до
нулевой. Поэтому пока погрешность прогнозирования не станет равна нулю,
финансовое прогнозирование останется актуальной проблемой.
В процессе осуществления первоначального обзора были рассмотрены
методы,
позволяющие
решить
задачу
прогнозирования
финансовых
показателей. Также был осуществлен анализ взаимного влияния финансовых
показателей. Так для курса доллара, который был взят за основу, самыми
связанными показателями оказались китайский юань, европейский евро и
корейская вона. Такой результат не был неожиданным, однако, целью
анализа были выяснить тесноту связи, что и было достигнуто.
На основании проведенного анализа, были выбраны показатели евро и
юаня для создания обучающей выборки для искусственной нейронной сети.
Как показали результаты тестирования, такой подход имеет потенциал. Так
как результаты, полученные по выборкам, скорректированным по курсу
второй валюты, продемонстрировали более точный результат. Из чего можно
заключить, что задачи работы были выполнены.
Из результатов можно предположить, что дальнейшее исследование
взаимного влияния финансовых показателей имеет место быть, однако, не
каждое влияние, оказываемое на прогнозируемый показатель можно
65
обличить в количественный показатель, что и служит камнем преткновения в
области прогнозирования финансовых показателей.
Подводя итог, можно с уверенностью сказать, что разработанный
программный продукт имеет потенциал к развитию, так как пути для
модернизации этого приложения существуют, и такая модернизация не
затронет функциональной ценности средства.
66
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1.
Аверченков В. И. Информационные системы в производстве и
экономике: учебное пособие / В. И. Аверченков, Ф. Ю. Лозбинев, А. А.
Тищенко– М.: Флинта, 2011. – 273 с.
2.
Ажеронок В. Разработка управляемого интерфейса/ В. Ажеронок,
А. Островерхов, М.Г. Радченко и др.– СПб.: 1С-Паблишинг, 2010 – 156 с.
3.
Альфред, В. Ахо Компиляторы. Принципы, технологии и
инструментарий / Альфред В. Ахо и др. - Москва: Высшая школа, 2015. 882 c.
4.
Афанасьев, В.Н. Анализ временных рядов и прогнозирование:
учебник / В.Н. Афанасьев, М.М. Юзбашев. - М.: ФиС, ИНФРА-М, 2012. - 320
c.
5.
Ахременко, А.С. Политический анализ и прогнозирование в 2 ч.
часть 1 2-е изд., испр. и доп. учебник и практикум для бакалавриата и
магистратуры / А.С. Ахременко. - Люберцы: Юрайт, 2016. - 224 c.
6.
Бабаев А.А. Информационные технологии и методы принятия
решений: Учебный курс / А.А. Бабаев СПб.: СПбГУ, 2007 – 156 с.
7.
Бабич, Т.Н. Прогнозирование и планирование в условиях рынка:
Учебное пособие / Т.Н. Бабич, И.А. Козьева, Ю.В. Вертакова, Э.Н.
Кузьбожев. - М.: НИЦ ИНФРА-М, 2013. - 336 c.
8.
Балена, Франческо Современная практика программирования на
Microsoft Visual Basic и Visual C# / Франческо Балена , Джузеппе Димауро. М.: Русская Редакция, 2015. - 640 c.
9.
Барский, А.Б. Логические нейронные сети / А.Б. Барский. - М.:
Интернет-Университет Информационных Технологий (ИНТУИТ), 2013. - 0 c.
10.
Боровский, А. C++ и Pascal в Kylix 3. Разработка интернет-
приложений и СУБД / А. Боровский. - М.: БХВ-Петербург, 2015. - 544 c.
11.
Бубнова Н.Г. Информатика в экономике: учебное пособие: / Н. Г.
Бубнова и др. – М: Вузовский учебник, 2011. – 476 с.
67
12.
Бунаков, В. Е. Нейронная физика. Учебное пособие: моногр. /
В.Е. Бунаков, Л.В. Краснов. - М.: Издательство Санкт-Петербургского
университета, 2015. - 200 c.
13.
Головинский, П. А. Математические модели. Теоретическая
физика и анализ сложных систем. Книга 2. От нелинейных колебаний до
искусственных нейронов и сложных систем / П.А. Головинский. - М.:
Либроком, 2012. - 234 c.
14.
Давыдов, В. Visual C++. Разработка Windows-приложений с
помощью MFC и API-функций / В. Давыдов. - М.: БХВ-Петербург, 2014. 576 c.
15.
Девятков В.В. Системы искусственного интеллекта: Учеб.
пособие/ В.В. Девятков; М-во образования РФ. - М.: МГТУ им. Н.Э. Баумана,
2011. - 352 с.
16.
Довбуш, Галина Visual C++ на примерах / Галина Довбуш ,
Анатолий Хомоненко. - М.: БХВ-Петербург, 2012. - 528 c.
17.
Егорова,
Н.Е.
Прогнозирование
фондовых
рынков
с
использованием экономико-математических моделей / Н.Е. Егорова, А.Р.
Бахтизин, К.А. Торжевский. - М.: Красанд, 2013. - 216 c.
18.
Зиборов, В. MS Visual C++ 2010 в среде .NET / В. Зиборов. - М.:
Питер, 2012. - 320 c.
19.
Иопа, Н.И. Информатика: (для технических специальностей):
учебное пособие / Н. И. Иопа. – М.: КноРус, 2011. – 469 с.
20.
Казначеева А.О. Основы информационных технологий: Учебное
пособие / А.О. Казначеева – СПб.: СПбГУ ИТМО, 2009. - 44 с.
21.
Кетков, Юлий Практика программирования: Visual Basic, C++
Builder, Delphi. Самоучитель (+ дискета) / Юлий Кетков , Александр Кетков.
- М.: БХВ-Петербург, 2012. - 464 c.
22.
Клещина,
М.Г.
Экономическое
прогнозирование:
пособие / М.Г. Клещина. - М.: ИД МИСиС, 2012. - 88 c.
68
Учебное
23.
Круглов, В.В. Искусственные нейронные сети. Теория и
практика: моногр. / В.В. Круглов, В.В. Борисов. - М.: Горячая линия Телеком; Издание 2-е, стер., 2002. - 382 c.
24.
Мадера,
А.Г.
Риски
и
шансы:
Неопределенность,
прогнозирование и оценка / А.Г. Мадера. - М.: Красанд, 2014. - 448 c.
25.
Мешков, А. Visual C++ и MFC / А. Мешков, Ю. Тихомиров. - М.:
БХВ-Петербург, 2013. - 546 c.
26.
Нейронные сети. Statistica Neural Networks. Методология и
технологии современного анализа данных. - М.: Горячая линия - Телеком,
2008. - 392 c.
27.
Неформальное
введение
в
C++
и
Turbo
Vision.
-
Москва: ИЛ, 2010. - 384 c.
28.
Павлов С.И. Системы искусственного интеллекта : Учебное
пособие / С.И. Павлов – Томск : ТУСУР, 2011. – 415 с.
29.
Павлова
Е.А.
Современные
информационные
технологии:
Учебный курс / Е.А. Павлова – М.: МИФИ, 2007 – 116 с.
30.
Панюкова, Т. А. Языки и методы программирования. Создание
простых GUI-приложений с помощью Visual С++. Учебное пособие / Т.А.
Панюкова, А.В. Панюков. - Москва: Мир, 2015. - 144 c.
31.
Пахомов, Б. C/C++ и MS Visual C++ 2010 для начинающих / Б.
Пахомов. - М.: БХВ-Петербург, 2011. - 736 c.
32.
Пахомов, Борис C/C++ и MS Visual C++ 2012 для начинающих /
Борис Пахомов. - Москва: СИНТЕГ, 2015. - 518 c.
33.
Пахомов, Борис С/С++ и MS Visual C++ 2012 для начинающих /
Борис Пахомов. - М.: "БХВ-Петербург", 2013. - 502 c.
34.
Позин, Н. В. Моделирование нейронных структур / Н.В. Позин. -
М.: Наука, 1970. - 264 c.
35.
Полубенцева, М. C/C++. Процедурное программирование / М.
Полубенцева. - М.: БХВ-Петербург, 2014. - 448 c.
69
36.
Поляков, А. Методы и алгоритмы компьютерной графики в
примерах на Visual C++ / А. Поляков, В. Брусенцев. - М.: БХВПетербург, 2011. - 560 c.
37.
Понамарев, В. Программирование на C++/C# в Visual Studio .NET
2003 / В. Понамарев. - М.: БХВ-Петербург, 2015. - 917c.
38.
Рассел, Джесси Вербализация нейронных сетей / Джесси Рассел. -
М.: VSD, 2013. - 0 c.
39.
Рассел, Джесси Искусственный нейрон / Джесси Рассел. - М.:
VSD, 2013. - 0 c.
40.
Роберт, С. Сикорд Безопасное программирование на C и C++ /
Роберт С. Сикорд. - Москва: РГГУ, 2014. - 496 c.
41.
Рыбина
интеллектуальных
Г.В.
систем:
Технология
Учебное
построения
пособие
/
Г.В.
динамических
Рыбина,
С.С.
Паронджанов – М.: МИФИ, 2011 – 280 с.
42.
Садовникова, Н.А. Анализ временных рядов и прогнозирование /
Н.А. Садовникова, Р.А. Шмойлова. - М.: МФПУ Синергия, 2016. - 152 c.
43.
Секунов, Н. Программирование на C++ в Linux / Н. Секунов. -
М.: БХВ-Петербург, 2016. - 425 c.
44.
Сидорина, Татьяна Самоучитель Microsoft Visual Studio C++ и
MFC / Татьяна Сидорина. - М.: "БХВ-Петербург", 2014. - 848 c.
45.
Толкачев, С. Нейронное программирование диалоговых систем /
С. Толкачев. - Москва: РГГУ, 2016. - 192 c.
46.
Трофимова В. В. Информационные системы и технологии в
экономике и управлении / В. В. Трофимова – М.: Изд-во: Юрайт-Издат, 2009.
47.
Чураков, Е.П. Прогнозирование экономических временных рядов
/ Е.П. Чураков. - М.: Финансы и статистика, 2008. - 208 c.
48.
Юревич, Артур Нейронные сети в экономике / Артур Юревич. -
М.: LAP Lambert Academic Publishing, 2014. - 80 c.
70
ПРИЛОЖЕНИЕ 1
Результаты тестирования
Рис.1. Тестирование на выборке 2, окно «по доллару»
Рис.2. Тестирование на выборке 3, окно «по доллару»
71
Рис.3. Тестирование на выборке 4, окно «по доллару»
Рис.4. Тестирование на выборке 5, окно «по доллару»
Рис.5. Тестирование на выборке 2, окно «по доллару и юаню»
72
Рис.6. Тестирование на выборке 3, окно «по доллару и юаню»
Рис.7. Тестирование на выборке 4, окно «по доллару и юаню»
Рис.8. Тестирование на выборке 5, окно «по доллару и юаню».
73
Рис.9. Тестирование на выборке 2, окно «по доллару и евро»
Рис.10. Тестирование на выборке 3, окно «по доллару и евро»
74
Рис.11. Тестирование на выборке 4, окно «по доллару и евро»
Рис.12. Тестирование на выборке 5, окно «по доллару и евро»
75
ПРИЛОЖЕНИЕ 2
Листинг программы
Код файла MyForm1.cpp
#include "StdAfx.h"
#include "MyForm1.h"
#include "iostream"
#include "stdio.h"
#include "fann.h"
#include "floatfann.h"
#include "math.h"
using std::cout;
using std::endl;
namespace ChildToParent {
System::Void Form1::button1_Click(System::Object^ sender,
System::EventArgs^ e) {
int main()
{
int k, p;
float a=0;
const unsigned int num_input = 8;
const unsigned int num_output = 1;
const unsigned int num_layers = 4;
const unsigned int num_neurons_hidden = k;
const float desired_error = (const float) 0.0001;
const unsigned int max_epochs = 2000000;
const unsigned int epochs_between_reports = 1000;
fann_type *calc_out;
fann_type input[8];
k = 5;
p = 0;
struct fann *ann = fann_create_standard(num_layers, num_input,
num_neurons_hidden, num_output);
fann_set_activation_function_hidden(ann,
FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann,
FANN_SIGMOID_SYMMETRIC);
while (p>1) {
fann_train_on_file(ann, "training.txt", max_epochs,
epochs_between_reports, desired_error);
input[0] = 0.492245;
input[1] = 0.500806;
input[2] = 0.512840;
76
input[3] = 0.513080;
input[4] = 0.512494;
input[5] = 0.515073;
input[6] = 0.523833;
input[7] = 0.541526;
calc_out = fann_run(ann, input);
a = a+abs(0.533184 - calc_out[0]);
input[0] = 0.098396;
input[1] = 0.102889;
input[2] = 0.100266;
input[3] = 0.093861;
input[4] = 0.089460;
input[5] = 0.093539;
input[6] = 0.098211;
input[7] = 0.099287;
calc_out = fann_run(ann, input);
a = a+abs(0.099525 - calc_out[0]);
input[0] = 0.906576;
input[1] = 0.924422;
input[2] = 1.000000;
input[3] = 0.944736;
input[4] = 0.893955;
input[5] = 0.967940;
input[6] = 0.915922;
input[7] = 0.886102;
calc_out = fann_run(ann, input);
a = a+abs(0.845931 - calc_out[0]);
a = a / 3.000000;
if (a > 0.001) {
fann_destroy(ann);
k++;
p++;
if (p == 4) {
l++;
p = 1;
}
}
else {
p = 0;
}
}
fann_save(ann, "set.net");
fann_destroy(ann);
}
this->label1->Visible = true;
this->button2->Enabled = true;
77
}
}
System::Void Form1::button2_Click(System::Object^ sender,
System::EventArgs^ e) {
input[0] = System::Convert::ToFloat(textBox1->Text);
input[1] = System::Convert::ToFloat(textBox2->Text);
input[2] = System::Convert::ToFloat(textBox3->Text);
input[3] = System::Convert::ToFloat(textBox4->Text);
input[4] = System::Convert::ToFloat(textBox5->Text);
input[5] = System::Convert::ToFloat(textBox6->Text);
input[6] = System::Convert::ToFloat(textBox7->Text);
input[7] = System::Convert::ToFloat(textBox8->Text);
calc_out = fann_run(ann, input);
textBox8->Text = System::Convert::ToString(calc_out);
}
Код файла MyForm2.cpp
#include "StdAfx.h"
#include "MyForm2.h"
#include "iostream"
#include "stdio.h"
#include "fann.h"
#include "floatfann.h"
#include "math.h"
using std::cout;
using std::endl;
namespace ChildToParent {
System::Void Form1::button1_Click(System::Object^ sender,
System::EventArgs^ e) {
int main()
{
int k, p;
float a=0;
const unsigned int num_input = 8;
const unsigned int num_output = 1;
const unsigned int num_layers = 4;
const unsigned int num_neurons_hidden = k;
const float desired_error = (const float) 0.0001;
const unsigned int max_epochs = 2000000;
const unsigned int epochs_between_reports = 1000;
fann_type *calc_out;
fann_type input[8];
k = 5;
p = 0;
struct fann *ann = fann_create_standard(num_layers, num_input,
num_neurons_hidden, num_neurons_hidden1, num_output);
fann_set_activation_function_hidden(ann,
FANN_SIGMOID_SYMMETRIC);
78
fann_set_activation_function_output(ann,
FANN_SIGMOID_SYMMETRIC);
while (p>1) {
fann_train_on_file(ann, "training3.txt", max_epochs,
epochs_between_reports, desired_error);
input[0] = 0.479756;
input[1] = 0.488100;
input[2] = 0.499829;
input[3] = 0.500063;
input[4] = 0.499491;
input[5] = 0.502005;
input[6] = 0.510543;
input[7] = 0.527787;
calc_out = fann_run(ann, input);
a = a+abs(0.519657 - calc_out[0]);
input[0] = 0.095899;
input[1] = 0.100278;
input[2] = 0.097722;
input[3] = 0.091479;
input[4] = 0.087190;
input[5] = 0.091165;
input[6] = 0.095719;
input[7] = 0.096768;
calc_out = fann_run(ann, input);
a = a+abs(0,097- calc_out[0]);
input[0] = 0.883576;
input[1] = 0.900969;
input[2] = 0.974629;
input[3] = 0.920767;
input[4] = 0.920767;
input[5] = 0.943383;
input[6] = 0.892684;
input[7] = 0.863621;
calc_out = fann_run(ann, input);
a = a+abs(0.824469- calc_out[0]);
a = a / 3.000000;
if (a > 0.001) {
fann_destroy(ann);
k++;
p++;
if (p == 4) {
l++;
p = 1;
}
}
else {
p = 0;
}
79
}
fann_save(ann, "set2.net");
fann_destroy(ann);
}
this->label1->Visible = true;
this->button2->Enabled = true;
}}
System::Void Form1::button2_Click(System::Object^ sender,
System::EventArgs^ e) {
System::Void Form1::button2_Click(System::Object^ sender,
System::EventArgs^ e) {
float mas[8];
float min1=35.4465, min2=6.2569, max1=93.2569, max2 = 15.3645
int s=0, k=0,m=0,n=0, l=0;
input[0] = System::Convert::ToFloat(textBox1->Text);
input[1] = System::Convert::ToFloat(textBox2->Text);
input[2] = System::Convert::ToFloat(textBox3->Text);
input[3] = System::Convert::ToFloat(textBox4->Text);
input[4] = System::Convert::ToFloat(textBox5->Text);
input[5] = System::Convert::ToFloat(textBox6->Text);
input[6] = System::Convert::ToFloat(textBox7->Text);
input[7] = System::Convert::ToFloat(textBox8->Text);
mas[0] = System::Convert::ToFloat(textBox9->Text);
mas[1] = System::Convert::ToFloat(textBox10->Text);
mas[2] = System::Convert::ToFloat(textBox11->Text);
mas[3] = System::Convert::ToFloat(textBox12->Text);
mas[4] = System::Convert::ToFloat(textBox13->Text);
mas[5] = System::Convert::ToFloat(textBox14->Text);
mas[6] = System::Convert::ToFloat(textBox15->Text);
mas[7] = System::Convert::ToFloat(textBox16->Text);
input[0]=(max1- input[0])/(max1/min1);
input[1]=(max1- input[1])/(max1/min1);
input[3]=(max1- input[2])/(max1/min1);
input[3]=(max1- input[3])/(max1/min1);
input[4]=(max1- input[4])/(max1/min1);
input[5]=(max1- input[5])/(max1/min1);
input[6]=(max1- input[6])/(max1/min1);
input[7]=(max1- input[7])/(max1/min2);
mas[0]=(max2- mas[0])/(max2/min2);
mas[1]=(max2- mas[1])/(max2/min2);
mas[3]=(max2- mas[2])/(max2/min2);
mas[3]=(max2- mas[3])/(max2/min2);
mas[4]=(max2- mas[4])/(max2/min2);
mas[5]=(max2- mas[5])/(max2/min2);
mas[6]=(max2- mas[6])/(max2/min2);
mas[7]=(max2- mas[7])/(max2/min2);
for (a=0; a<8; a++){
80
s=s+ input[a];
k=k+ mas[a];
}
s=s/8;
k=k/8;
for (a=0; a<8; a++){
m=m+ (input[a]-s)*(mas[a]-k);
n=n+ (input[a]-s)^2;
l=l+ (mas[a]-s)^2;
}
m=m/(n*l)^0.5;
input[0] = input[0]*m;
input[1] = input[1]*m;
input[2] = input[2]*m;
input[3] = input[3]*m;
input[4] = input[4]*m;
input[5] = input[5]*m;
input[6] = input[6]*m;
input[7] = input[7]*m;
calc_out = fann_run(ann, input);
textBox17->Text = System::Convert::ToString(calc_out);
}
}
}
}
Код файла MyForm3.cpp
#include "StdAfx.h"
#include "MyForm1.h"
#include "iostream"
#include "stdio.h"
#include "fann.h"
#include "floatfann.h"
#include "math.h"
using std::cout;
using std::endl;
namespace ChildToParent {
System::Void Form1::button1_Click(System::Object^ sender,
System::EventArgs^ e) {
int main()
{
int k, l, p;
float a=0;
const unsigned int num_input = 8;
const unsigned int num_output = 1;
const unsigned int num_layers = 4;
const unsigned int num_neurons_hidden = k;
const unsigned int num_neurons_hidden1 = l;
const float desired_error = (const float) 0.0001;
81
const unsigned int max_epochs = 2000000;
const unsigned int epochs_between_reports = 1000;
fann_type *calc_out;
fann_type input[8];
k = 5;
l = 1;
p = 0;
struct fann *ann = fann_create_standard(num_layers, num_input,
num_neurons_hidden, num_neurons_hidden1, num_output);
fann_set_activation_function_hidden(ann,
FANN_SIGMOID_SYMMETRIC);
fann_set_activation_function_output(ann,
FANN_SIGMOID_SYMMETRIC);
while (p>1) {
fann_train_on_file(ann, "training3.txt", max_epochs,
epochs_between_reports, desired_error);
input[0] = 0.492245;
input[1] = 0.500806;
input[2] = 0.512840;
input[3] = 0.513080;
input[4] = 0.512494;
input[5] = 0.515073;
input[6] = 0.523833;
input[7] = 0.541526;
calc_out = fann_run(ann, input);
a = a+abs(0.533184 - calc_out[0]);
input[0] = 0.098396;
input[1] = 0.102889;
input[2] = 0.100266;
input[3] = 0.093861;
input[4] = 0.089460;
input[5] = 0.093539;
input[6] = 0.098211;
input[7] = 0.099287;
calc_out = fann_run(ann, input);
a = a+abs(0.099525 - calc_out[0]);
input[0] = 0.906576;
input[1] = 0.924422;
input[2] = 1.000000;
input[3] = 0.944736;
input[4] = 0.893955;
input[5] = 0.967940;
input[6] = 0.915922;
input[7] = 0.886102;
calc_out = fann_run(ann, input);
a = a+abs(0.845931 - calc_out[0]);
a = a / 3.000000;
if (a > 0.001) {
82
fann_destroy(ann);
k++;
p++;
if (p == 4) {
l++;
p = 1;
}
}
else {
p = 0;
}
}
fann_save(ann, "set3.net");
fann_destroy(ann);
}
this->label1->Visible = true;
this->button2->Enabled = true;
}}
System::Void Form1::button2_Click(System::Object^ sender,
System::EventArgs^ e) {
float mas[8];
float min1=35.4465, min2=6.2569, max1=93.2569, max2 = 15.3645
int s=0, k=0,m=0,n=0, l=0;
input[0] = System::Convert::ToFloat(textBox1->Text);
input[1] = System::Convert::ToFloat(textBox2->Text);
input[2] = System::Convert::ToFloat(textBox3->Text);
input[3] = System::Convert::ToFloat(textBox4->Text);
input[4] = System::Convert::ToFloat(textBox5->Text);
input[5] = System::Convert::ToFloat(textBox6->Text);
input[6] = System::Convert::ToFloat(textBox7->Text);
input[7] = System::Convert::ToFloat(textBox8->Text);
mas[0] = System::Convert::ToFloat(textBox9->Text);
mas[1] = System::Convert::ToFloat(textBox10->Text);
mas[2] = System::Convert::ToFloat(textBox11->Text);
mas[3] = System::Convert::ToFloat(textBox12->Text);
mas[4] = System::Convert::ToFloat(textBox13->Text);
mas[5] = System::Convert::ToFloat(textBox14->Text);
mas[6] = System::Convert::ToFloat(textBox15->Text);
mas[7] = System::Convert::ToFloat(textBox16->Text);
input[0]=(max1- input[0])/(max1/min1);
input[1]=(max1- input[1])/(max1/min1);
input[3]=(max1- input[2])/(max1/min1);
input[3]=(max1- input[3])/(max1/min1);
input[4]=(max1- input[4])/(max1/min1);
input[5]=(max1- input[5])/(max1/min1);
input[6]=(max1- input[6])/(max1/min1);
input[7]=(max1- input[7])/(max1/min2);
83
mas[0]=(max2- mas[0])/(max2/min2);
mas[1]=(max2- mas[1])/(max2/min2);
mas[3]=(max2- mas[2])/(max2/min2);
mas[3]=(max2- mas[3])/(max2/min2);
mas[4]=(max2- mas[4])/(max2/min2);
mas[5]=(max2- mas[5])/(max2/min2);
mas[6]=(max2- mas[6])/(max2/min2);
mas[7]=(max2- mas[7])/(max2/min2);
for (a=0; a<8; a++){
s=s+ input[a];
k=k+ mas[a];
}
s=s/8;
k=k/8;
for (a=0; a<8; a++){
m=m+ (input[a]-s)*(mas[a]-k);
n=n+ (input[a]-s)^2;
l=l+ (mas[a]-s)^2;
}
m=m/(n*l)^0.5;
input[0] = input[0]*m;
input[1] = input[1]*m;
input[2] = input[2]*m;
input[3] = input[3]*m;
input[4] = input[4]*m;
input[5] = input[5]*m;
input[6] = input[6]*m;
input[7] = input[7]*m;
calc_out = fann_run(ann, input);
textBox17->Text = System::Convert::ToString(calc_out);
}
}
84
Отзывы:
Авторизуйтесь, чтобы оставить отзыв