| |
Решение задачи общей нелинейной регрессии
в системе STATISTICA Neural Networks
И.Е. Полежаев, технический специалист StatSoft Russia
Постановка задачи
Очень часто практикующий аналитик сталкивается с проблемой решения сложных задач в условиях жесточайшего цейтнота и полного отсутствия информации о природе изучаемого явления. Основная причина, - конфиденциальность данных стороны, заказывающей математическое исследование.
Обычно в таких случаях разговор сводится к вербальной постановке задачи на уровне "предложить методику построения зависимости переменной А от переменных Б, С, Д,… с максимальной точностью и, желательно, как можно быстрее". В методических целях не будем отступать от этой традиции, ибо в этой статье основное внимание хочется уделить не конкретному физическому смыслу явления, а скорее методам, позволяющим такое исследование провести с помощью технологий StatSoft.
Вашему вниманию предлагается решение задачи общей нелинейной регрессии, в которой в качестве независимых переменных выступают как непрерывные переменные, так и категориальные (уровни факторов).
Рассматривается реальный физический процесс, который, с точки зрения экспертов, достаточно хорошо описывается пятью переменными в виде z = f (x,y, factor1, factor2), где
z - зависимая переменная, показатель выхода процесса; x - первая непрерывная независимая переменная; y - вторая непрерывная независимая переменная; factor1 - первый независимый фактор, принимающий всего два значения m и s; factor2 - второй независимый фактор, принимающий всего два значения l и d.
За всю историю наблюдения за процессом, накопился массив данных, которые сохранены в таблице системы STATISTICA. Вид соответствующей Таблицы данных представлен на Рис.1.

Рис.1. Таблица исходных данных о процессе.
Целью исследования является построение математической модели физического процесса на основе исходных данных, которая по заданной четверке значений (x, y, factor1, factor2) выдавала бы отклик z с точностью не хуже 5%.
Почему нейронная сеть?
Как уже упоминалось выше, методику решения задачи необходимо подготовить в максимально короткий срок. При этом факт нелинейности задачи не вызывает сомнения. Конечно, можно было бы попробовать решить задачу, воспользовавшись модулем STATISTICA Nonlinear Estimation, а именно при помощи предлагаемых данным модулем итеративных процедур "нащупать" вид функции. Однако, здесь есть ряд неприятностей, которые значительно растягивают процедуру поиска решения. Важнейшей из них является формулировка гипотезы о явном виде изучаемой зависимости, которая совсем не является очевидной. Для иллюстрации сказанного приведем сглаженную поверхностью зависимость z = f(x, y) для двух уровней переменной factor1.

Рис.2. Вид зависимости z = f(x, y) для двух уровней factor1.
По виду поверхности, изображенной на Рис.2, сразу, без дополнительных исследований, о явном виде зависимости сказать что-либо сложно. Тем более, следует упомянуть, что мы не учли еще один фактор. В общем, решение подобной задачи методами нелинейного оценивания может растянуться очень надолго, а может так ни к чему и не привести. В таких критических ситуациях, когда известно, что
- зависимость между переменными есть;
- зависимость определенно нелинейная;
- о явном виде зависимости сказать что-либо сложно,
выручают нейросетевые алгоритмы. Рассмотрим способ решения данной задачи в модуле STATISTICA Neural Networks.
Первый шаг. Попытка решить задачу сразу
Очень распространенным является следующий тезис: "нейронные сети представляют собой универсальную структуру, позволяющую реализовать любой алгоритм". Попробуем, слепо веря данному утверждению, построить нейронную сеть, которая бы "уловила" предлагаемую зависимость сразу (имеется в виду, без предварительного, разведочного анализа). Тем более что эксперты, наблюдающие за этим физическим процессом, с полной уверенностью утверждают, что зависимость есть. Будем осуществлять поиск сети, на вход которой подаются четыре фактора (x, y, factor1, factor2), а на выходе снимаются значения z.
Одним из важнейших вопросов, до сих пор, не решенных современной наукой, является вопрос о структуре нейронный сети, которая была бы способна к воспроизведению искомой многомерной нелинейной зависимости. Да действительно, теорема Колмогорова о полноте, доказанная им еще 1957 году, утверждает, что нейронная сеть способна воспроизвести любую (очень важно - непрерывную) функцию. Однако она не прелагает исследователю рецепта по созданию такой сети. В 1988 году, ряд авторов обобщили теорему Колмогорова и показали, что любая непрерывная функция может быть аппроксимирована трехслойной нейронной сетью с одним скрытым слоем и алгоритмом обратного распространения ошибки с любой степенью точности. Таким образом, в нашем случае положительным аспектом является знание того, что сеть должна быть трехслойной, но опять-таки в распоряжении нет правил, устанавливающих зависимость между "любой степенью точности" и количеством нейронов на промежуточном, так называемом скрытом слое.
Резюмируя все вышесказанное, отметим, что универсальных правил, говорящих о том, какой топологии нейронной сети стоит придерживаться для решения той или иной задачи нет. Поэтому, необходима разумная процедура поиска нужной сети.
Модуль Neural Networks системы STATISTICA включает в себя уникальную процедуру, организующую поиск нужной конфигурации сети. Данный инструмент называется Intelligent Problem Solver. Воспользуемся этим инструментом и осуществим поиск нейронной сети, которая будет способна к решению нашей задачи.
Для запуска модуля Neural Networks воспользуемся одноименной командой основного меню системы STATISTICA - Statistics. Данная команда приведет к вызову стартовой панели модуля STATISTICA Neural Networks (SNN).

Рис.3. Стартовая панель модуля SNN.
Во вкладке Quick - Быстрый данного диалогового окна доступны три, наиболее часто используемые опции. В разделе Problem Type - Класс задач предлагается осуществить выбор того класса задач, с которым мы столкнулись. Нашей целью является построение многомерной зависимости или, другими словами, многомерной регрессии. Значит, в разделе Problem Type - Класс задач следует указать Regression - Регрессия. Отметим, что здесь доступны и другие классы задач Classification - Классификация, Time series - Прогнозирование временных рядов и Cluster analysis - Кластерный анализ.
Определившись с классом задач, необходимо указать переменные для проведения Анализа. Для того чтобы выбрать переменные, воспользуемся кнопкой Variables. При нажатии данной кнопки появляется диалоговое окно Select input (independent), output (dependent) and selector variables - Укажите входные (независимые), выходные (зависимые) и группирующие переменные. В данном диалоговом окне необходимо задать три списка переменных. Continuous outputs - Непрерывные выходящие, в нашем случае, - это переменная z. Continuous inputs - Непрерывные входящие, в нашем примере, - это переменные x и y. А так же Categorical inputs - Категориальные входящие, у нас это переменные Factor1 и Factor2. Раздел Subset variable - Разбиение на подмножества является необязательным для заполнения и служит для выбора переменной, в которой содержатся коды для разбиения данных на обучающее контрольное и тестовое множества.

Рис.4. Выбор переменных для Анализа.
В разделе Select analysis - Выбор анализа доступны две опции Intelligent Problem Solver и Custom Network Designer. На данном этапе нам требуется первая опция, которая устанавливается по умолчанию. Все необходимые нам параметры выбраны. Для продолжения Анализа нажмем кнопку OK.
На следующем шаге появляется диалоговое окно настройки процедуры Intelligent Problem Solver. Это окно содержит большое количество опций, распределенных в различных вкладках. На данном этапе нам понадобится вкладка Quick - Быстрый и её раздел Optimization Time - Время оптимизации.
Данный раздел содержит группу опций, отвечающих за время исполнения алгоритма поиска нейронной сети. Имеется две возможности:
1. задать количество сетей, которые необходимо протестировать (выяснить подходят ли они для решения сформулированной задачи);
2. вручную задать время выполнения алгоритма. Для этого необходимо воспользоваться опцией Hours/Minutes - Часы/Минуты.
Воспользуемся первой опцией. В разделе Optimization Time - Время оптимизации в разделе Networks tested - Количество тестируемых сетей укажем 100. Все остальные параметры остаются неизменными.

Рис.5. Задание количества тестируемых сетей.
Для запуска процедуры поиска сетей нажмем ОК.
Состояние алгоритма поиска отображается в диалоговом окне IPS Training In Progress - Процесс поиска сети, см. Рис.6.

Рис.6. Процесс поиска сети.
Во время работы алгоритма поиска подходящей нейронной сети в этом диалоговом окне приводится информация о времени исполнения алгоритма, а так же о рассмотренных нейронных сетях. Цель алгоритма поиска - перебор ряда нейросетевых конфигураций и выбор наилучшей с точки зрения минимума ошибки на выходе сети и максимума её производительности. Соответственно, для осуществления процедуры сравнения сетей, сети необходимо обучать, рассчитывать их ошибки и производительности и эти показатели, затем, сравнивать. В результате, каждая обученная и проверенная нейронная конфигурация описывается строкой в информационном поле диалогового окна. Наиболее важными показателями здесь являются Profile - Тип сети, Train (Select, Test) Performance - Производительность сети на обучающем (контрольном, тестовом) множестве и Train Error - Ошибка обучения.
В разделе Profile - Тип сети описывается топология нейронной сети, т.е. класс сетей, к которому она принадлежит (персептрон, сеть RBF и т.д.), количество входных и выходных переменных, количество скрытых слоев и число элементов на каждом скрытом слое.
Для обучения алгоритм поиска сети разбивает (по умолчанию) все множество наблюдений на Training - Обучающее, Selection - Контрольное и Test - Тестовое множества. Каждое из этих множеств несет свою важную функцию.
На обучающем множестве происходит непосредственное обучение сети, т.е. изменение весовых коэффициентов каждого из нейронов пропорционально ошибке на выходе. Соответственно все наблюдения из этого множества многократно участвуют в процедуре изменения весовых коэффициентов обучаемой сети.
Наблюдения контрольного множества в процедуре изменения весов нейронов не участвуют. Основная функция этих данных в постоянном контроле способности сети к обобщению данных, на которых она не обучалась. Такая процедура называется кросс - проверкой. На каждом шаге алгоритма обучения рассчитывается ошибка для всего набора наблюдений из контрольного множества и сравнивается с ошибкой на обучающем множестве. Естественно, что эти ошибки будут отличаться. Как правило, ошибка на контрольном множестве превышает ошибку на обучающем множестве. Однако, важен не сам факт отличия, а наблюдаемая тенденция ошибок.
Действительно, алгоритм обучения нацелен на минимизацию ошибки на выходе сети. Соответственно, ошибка на обучающем множестве просто обязана в среднем уменьшаться. Но никто не обещает спада ошибки на проверочном множестве. Итак, если наблюдается картина роста ошибки на контрольном множестве, в то время как она уменьшается на обучающем множестве, то этого говорит о том, что сеть "зазубрила" все предъявленные ей наблюдения и не способна к обобщению. Такое состояние называется переобучением. Желательно переобучения избегать. Алгоритм Intelligent Problem Solver самостоятельно отслеживает переобучение и при завершении обучения возвращает сеть в наилучшее состояние (Retain Best Network - Восстановить наилучшую сеть).
Тестовое множество не участвует в обучении вообще. Оно используется после завершения обучения для расчета производительности полученной сети и её ошибки на данных, о которых "ей вообще ничего неизвестно". Хорошей сетью можно считать ту сеть, у которой ошибка одинаково мала на всех трех подмножествах.
Под производительностью сети в задаче регрессии понимается отношение стандартного отклонения ошибок сети к стандартному отклонению исходных данных (SD-ratio). Эмпирическое правило гласит, что если SD-ratio не превышает значения 0.2, сеть подобрана хорошо. Производительность рассчитывается для каждого из трех подмножеств. Желательно, чтобы разброс значений производительности на каждом из подмножеств был небольшим.

Рис.7. Диалоговое окно результатов поиска сети.
В итоге, нами была отобрана сеть - трехслойный персептрон с 8-ю нейронами на скрытом слое, производительностью 0.07. Для того чтобы выбрать нужную сеть из списка, предлагаемого Intelligent Problem Solver, необходимо воспользоваться кнопкой Select Models - Выбрать модели диалогового окна Results - Результаты. В появившемся диалоговом окне, необходимо подсветить нужную нейронную сеть и нажать ОК. Для того чтобы посмотреть иллюстрацию выбранной сети, воспользуемся кнопкой Network Illustration вкладки Advanced - Дополнительно диалогового окна результатов.

Рис.8. Иллюстрация выбранной нейронной сети.
Графической иллюстрацией качества работы нейронной сети является график зависимости наблюдаемых значений выходной переменной z от предсказанных значений. Для построения такого графика необходимо воспользоваться кнопкой Graph X versus Y - График X от Y, расположенной во вкладке Plots - Графики. При этом, предварительно указав в качестве X - axis - Observed - Наблюдаемые, Y - axis - Predicted - Предсказанные. Результат построения графика приведен на Рис.9.

Рис.9. График зависимости предсказанных значений Z от наблюдаемых Z.
Если модель построена хорошо, то точки этого графика должны располагаться как можно ближе к прямой, лежащей под углом 45 градусов к осям координат. На первый взгляд, так оно и происходит. Значит, построенная нами нейросетевая модель хорошо согласуется с данными. Для того чтобы окончательно убедиться в правильности сделанного вывода, рассмотрим численные результаты.
Во вкладке Predictions - Прогнозы диалогового окна результатов нажмем кнопку Predictions - Прогнозы для просмотра результатов работы нейронной сети на всем наборе данных. Достаточно беглого просмотра полученной таблицы (см. Рис.10), чтобы убедиться в том, что не все так хорошо, как хотелось бы.

Рис.10. Таблица результатов прогона всего набора данных через нейронную сеть.
В левой колонке таблицы отображаются истинные значения. В правой - отклик нашей нейронной сети на соответствующую четверку независимых переменных. Очень плохо дело обстоит с нулевыми значениями z. В этой области ошибки колоссальны. В области значений z, не превышающих 100, результаты так же сильно противоречивы. Сеть более - менее неплохо проявляет себя в области больших значений z, порядка 1000. Итог: требуемой погрешности 5% на всех данных достичь не удалось.
Таким образом, результаты производительности сети и график ввели нас в заблуждение. И дело вот в чем. Значения переменной z изменяются от 0 до 10000. А показания нейронной сети в области больших значений z достаточно точны. При расчете статистик производительности основную роль сыграли именно эти, "большие" данные, в то время как кричащая ошибка в области малых чисел была утеряна в результате усреднения всех ошибок.
Тот же самый эффект - ловушку мы получили при рассмотрении графика. Ввиду большого диапазона z относительно большие изменения в области малых значений z не видны. Для того чтобы в этом убедиться, воспользуемся опцией Zoom - Увеличить, расположенной на графической панели инструментов (эта панель видна при активном графическом документе STATISTICA) в области малых значений z на построенном графике (см. Рис.11).

Рис.11. График зависимости предсказанных значений Z от наблюдаемых Z в области малых значений Z.
На этом графике отчетливо видно отсутствие какой-либо зависимости между наблюдаемыми и предсказанными значениями. Эллипс, расположенный слева содержит точки с абсциссой 0 и различными ординатами. Через эллипс, расположенный справа, невозможно провести прямую линию однозначным образом. Это так же свидетельствует в пользу отсутствия зависимости.
Таким образом, с помощью построенной нейронной сети, нам удалось объяснить лишь часть изучаемого физического процесса (область больших значений откликов процесса z). В области малых значений отклика процесса и области нуля, нам не удалось построить точной нейросетевой модели.
На первый взгляд может показаться, что мы получили, противоречащий теореме Колмогорова о полноте, результат. Однако, как мы уже упоминали ранее, теорема работает только с непрерывными функциями. В нашем же случае, имеются серьезные основания полагать, что функция изучаемого физического процесса не является непрерывной. Об этом можно судить как по графику зависимости z группы переменных (см. Рис.1), так и по графику наблюдаемых - предсказанных значений (см. Рис.11).
Не будем опускать руки. Судя по полученным результатам, среди множества данных есть и "островки стабильности". Иначе говоря, можно с большой долей уверенности предположить, что в некоторых областях пространства независимых переменных функция процесса ведет себя непрерывно. Например, такой областью может являться область независимых предикторов, дающих большие значения z. Для нас крайне желательно такие области локализовать. Для этого осуществим разбиение данных на однородные группы, или проведем кластеризацию.
Кластеризация данных
Сформулируем задачу кластерного анализа. В нашем распоряжении имеется 200 объектов (по количеству доступных для построения моделей наблюдений) в 4х-мерном пространстве (x, y, factor1, factor2). Пятую переменную z мы отбросили ввиду того, что она зависит от всех остальных и заведомо не повлияет на качество кластеризации. Необходимо эффективно разбить эти объекты на ряд групп, таким образом, что:
- внутри группы объекты максимально схожи между собой;
- группы максимально между собой различаются.
Если такое разбиение осуществимо, то, скорее всего, ввиду однородности, внутри каждого кластера зависимость z = f(x, y, factor1, factor2) будет представлять собой непрерывную функцию. И тогда, построив для каждого из кластеров отдельную нейронную сеть, мы построим модель физического процесса.
Для решения поставленной задачи сначала необходимо понять, как будет проводиться сравнение объектов. Иначе говоря, в рассматриваемом пространстве (x, y, factor1, factor2) требуется ввести количественную меру сходства между объектами. В нашем случае кажется удобным введение метрики - евклидово расстояние, которая вычисляется как корень из суммы квадратов покоординатных разностей (очень часто такое выражение называют "теоремой Пифагора", что, в общем-то, не совсем верно).
Однако, введение метрики - это еще не все. Часто бывает так, что различные независимые переменные измеряются в разных шкалах с различными диапазонами. Соответственно, не оговорив дополнительных условий, можно получить некачественное решение: влияние большого количества переменных на результат кластеризации упущен. Действительно, если значения одной переменной измеряются в сотнях и изменяются в пределах десяти, в то время как другая переменная в среднем равна нулю и изменяется в пределах единицы, то вклад последней в евклидово расстояние будет пренебрежительно малым. Чтобы избежать подобных неприятностей проводят процедуру стандартизации переменных. Результатом стандартизации является приведение всех переменных к единой шкале: данные изменяются в пределах нуля в диапазоне ±3, причем большая часть всех значений будет принадлежать интервалу (-1, 1). Очень важно, что процедура стандартизации не изменяет структуру взаимодействий между переменными. Соответственно, стандартизация не влияет на структуру кластеров.
Для того, чтобы провести стандартизацию переменной необходимо выделить соответствующий столбец, нажать правую кнопку мыши, из появившегося контекстного меню выбрать раздел Fill/Standardize Block - Заполнить/Стандартизовать Блок и выполнить команду меню Standardize Columns - Стандартизовать столбцы. Эту процедуру необходимо выполнить для переменных x и y.
Стоит обратить внимание на то, что стандартизация применима к переменным, измеряемым в непрерывной шкале. В нашем примере присутствует две категориальные переменные. Переменная factor1, принимающая значения только (s, m) и переменная factor2, значения которой могут быть только (l, d). По умолчанию система STATISTICA уровням факторов этих переменных присвоила значения (101, 102). Для соблюдения корректности дальнейших процедур эти переменные необходимо перекодировать, так, чтобы диапазон их изменения соответствовал диапазону изменения непрерывных переменных.
Для того чтобы перекодировать категориальную переменную, необходимо дважды кликнуть на ее названии в Таблице данных и в появившемся диалоговом окне спецификаций переменных нажать кнопку Text Labels - Текстовые метки.

Рис.12. Изменение значений уровней факторов категориальной переменной.
В разделе Numeric - Число диалогового окна Text Labels Editor - Редактор текстовых меток необходимо поставить значения -1 и 1. Данную перекодировку необходимо провести для обеих категориальных переменных factor1 и factor2. Таким образом, среднее категориальных переменных так же равно нулю, а диапазон значений сравним с диапазоном изменения непрерывных переменных. Стоит отметить, что округленный до целых результат формальной стандартизации категориальных переменных приводит к тому же результату. Однако если просто выполнить стандартизацию категориальных переменных, текстовые значения будут утеряны, что может привести к некорректным результатам.
"На сколько кластеров делить данные?" - важнейший, и подчас не тривиальный вопрос кластерного анализа. Хорошо если эксперты, постоянно наблюдающие за процессом, имеют представление о его природе и могут предположительно указать на число кластеров. Но часто приходится сталкиваться со случаями, когда априори судить о количестве кластеров не могут даже специалисты. В таких ситуациях неоценимую услугу может оказать агломеративный метод иерархической классификации, или иерархический кластерный анализ.
Сущность данного метода заключается в том, что на первом шаге каждый объект выборки рассматривается как отдельный кластер. Процесс объединения происходит последовательно: на основании матрицы расстояний объединяются наиболее близкие объекты. Если матрица сходства первоначально имеет размерность mxm, то полностью процесс кластеризации завершается за m-1 шагов, в итоге все объекты будут объединены в один кластер. Последовательность объединения легко поддается геометрической интерпретации и может быть представлена в виде графа - дерева (дендрограммы). На оси абсцисс дендрограммы откладываются имена наблюдений, а по оси ординат, - расстояние объединения наблюдений в кластеры. Соответственно, чем выше расположена ветвь дерева на дендрограмме, тем позднее было проведено объединение объектов.
Проведем иерархических кластерный анализ на стандартизованных данных. Для этого воспользуемся командами меню Statistics - Multivariate Exploratory Techniques - Cluster Analysis - Анализ - Многомерный разведочный анализ - Кластерный анализ. В появившемся диалоговом окне Clustering method - Методы кластеризации выберем Joining (tree clustering) - Иерархическая классификация и нажмем ОК. В диалоговом окне Cluster Analysis: Joining (Tree Clustering) - Кластерный анализ: иерархическая классификация выберем вкладку Advanced - Дополнительно. В качестве переменных для анализа выберем x, y, Factor1, Factor2. В разделе Cluster - Объекты выберем Cases (Rows) - Наблюдения (строки). В качестве меры сходства в разделе Distance measure - Мера близости укажем Euclidian distances - Евклидово расстояние. Остальные параметры оставим по умолчанию. Вид диалогового окна со всеми нужными установками представлен на Рис.13.

Рис.13. Диалоговое окно задания параметров иерархической классификации.
Для продолжения анализа нажмем ОК. В появившемся диалоговом окне результатов объединения отменим опцию Rectangular Branches - Прямоугольные ветви и нажмем кнопку Vertical icicle plot - Вертикальная дендрограмма. Результат построения графика представлен на Рис.14.

Рис.14. Вертикальная дендрограмма древовидной классификации для переменных x, y, factor1, factor2.
Как уже упоминалось ранее, древовидная диаграмма отображает историю объединения объектов в кластеры. Чем выше ветви дерева - графа, тем позднее объекты были объединены. На представленном Рис.14 отчетливо выделяются четыре ветви дерева, объединенные на одинаковой высоте. Каждая из этих ветвей имеет продолжение в виде скоплений ветвей гораздо меньшей высоты, еще называемых кучностями. Причем, структура скоплений не обладает ярко выраженной иерархией.
Таким образом, можно утверждать, что все множество данных хорошо разделяется на четыре кластера. Стоит отметить, что данный график хорошо иллюстрирует достижение поставленных нами целей об однородности данных внутри кластера и максимальной отдаленности самих кластеров. Действительно, ветви внутри каждого из скоплений имеют примерно одинаковую высоту, при этом высоты больших ветвей, объединяющих выделенные кластеры, значительно превышают высоты малых ветвей - представителей кластеров.
Естественное стремление - выявить как можно меньшее количество переменных, "ответственных" за кластеризацию. Чем меньше переменных вовлечено в процесс разбиения данных на кластеры, тем больше шансов понять физический смысл данного разбиения. Проведем иерархическую классификацию для переменных всех переменных, кроме x. Последовательность действий аналогична предыдущему анализу. Результат кластеризации приведен в виде дендрограммы на Рис.15.

Рис.15. Вертикальная дендрограмма древовидной классификации для переменных y, factor1, factor2.
Высота больших ветвей полученной древовидной диаграммы осталась прежней, в то время как высоты скоплений ветвей уменьшились. Следовательно, при данной комбинации переменных внутриклассовые различия стали значительно меньше, в то время как расстояния между кластерами остались прежними. Значит, в отсутствии переменной x мы получили более качественную кластеризацию в рамках упомянутых выше критериев.
На вопрос о количестве кластеров мы ответили, их 4. Теперь необходимо выяснить, какой объект, к какому кластеру принадлежит. Для этого воспользуемся итеративной процедурой, методом к-средних. Сущность метода заключается в том, что процесс классификации начинается с задания начальных условий. В нашем случае это количество образуемых кластеров и центры этих кластеров. Далее, каждое многомерное наблюдение совокупности относится к тому кластеру, центр которого ближе всех к этому наблюдению. Затем выполняется проверка на устойчивость классификации. Если классификация устойчива, процесс останавливается. В противном случае, происходит очередная процедура разбиения объектов по кластерам.
Выполним метод K-средних на стандартизованных данных. Для этого воспользуемся командами меню Statistics - Multivariate Exploratory Techniques - Cluster Analysis - Анализ - Многомерный разведочный анализ - Кластерный анализ. В появившемся диалоговом окне Clustering method - Методы кластеризации выберем К-means clustering - Кластеризация методом К-средних и нажмем ОК. В диалоговом окне Cluster Analysis: К-means clustering - Кластерный анализ: кластеризация методом К-средних выберем вкладку Advanced - Дополнительно. В качестве переменных для анализа выберем y, Factor1, Factor2. В разделе Cluster - Объекты выберем Cases (Rows) - Наблюдения (строки). В поле Number of Clusters - Число кластеров введем 4. Остальные параметры оставим по умолчанию. Вид диалогового окна со всеми нужными установками представлен на Рис.16.

Рис.16. Диалоговое окно задания параметров кластеризации методом K-средних.
Для продолжения анализа нажмем ОК. Во вкладке Advanced - Дополнительно диалогового окна результатов нажмем кнопку Save classifications and distances - Сохранить результаты классификации и расстояния. В появившейся Таблице результатов скопируем переменную Cluster и добавим ее в исходный файл данных. В строках данной переменной содержатся номера кластеров, к которым в итоге были отнесены многомерные объекты. Кластеризация проведена.
Построение нейросетевого классификатора
В результате кластеризации все множество данных было разбито на четыре класса. Внутри кластеров данные однородны, а, значит, поведение физического процесса в рамках одного кластера более предсказуемо, нежели поведение этого процесса в общем. Возникает разумный вопрос, "к какому кластеру относится новый элемент (x, y, Factor1, Factor2)"? Для этого необходимо создать инструмент, который по заданной четверке чисел выводил бы кластер, к которому данный объект принадлежит. Иными словами, необходимо решить задачу классификации.
Решим задачу классификации с применением нейронных сетей. Для запуска модуля Neural Networks воспользуемся одноименной командой основного меню системы STATISTICA - Statistics. Данная команда приведет к вызову стартовой панели модуля STATISTICA Neural Networks (SNN).

Рис.17. Стартовая панель модуля SNN.
Во вкладке Quick - Быстрый данного диалогового окна доступны три, наиболее часто используемые опции. В разделе Problem Type - Класс задач предлагается осуществить выбор того класса задач, с которым мы столкнулись. Нашей целью является построение классификатора. Значит, в разделе Problem type - Класс задач следует указать Classification - Классификация.
Определившись с классом задач, необходимо указать переменные для проведения Анализа. Для того чтобы выбрать переменные, воспользуемся кнопкой Variables. При нажатии данной кнопки появляется диалоговое окно Select input (independent), output (dependent) and selector variables - Укажите входные (независимые), выходные (зависимые) и группирующие переменные. В данном диалоговом окне необходимо задать три списка переменных. Categorical outputs - Категориальные выходящие, в нашем случае, - это переменная Cluster. Continuous inputs - Непрерывные входящие, в нашем примере, - это переменные x и y. А так же Categorical inputs - Категориальные входящие, у нас это переменные Factor1 и Factor2. Раздел Subset variable - Разбиение на подмножества является необязательным для заполнения и служит для выбора переменной, в которой содержатся коды для разбиения данных на обучающее контрольное и тестовое множества.

Рис.18. Выбор переменных для Анализа.
В разделе Select analysis - Выбор анализа доступны две опции Intelligent Problem Solver и Custom Network Designer. На данном этапе нам требуется первая опция, которая устанавливается по умолчанию. Все необходимые нам параметры выбраны. Для продолжения Анализа нажмем кнопку OK.
На следующем шаге появляется диалоговое окно настройки процедуры Intelligent Problem Solver. Это окно содержит большое количество опций, распределенных в различных вкладках. На данном этапе нам понадобится вкладка Quick - Быстрый и её раздел Optimization Time - Время оптимизации. В этом в поле ввода Networks tested - Количество тестируемых сетей укажем 50. Все остальные параметры остаются неизменными.

Рис.19. Вид диалогового окна поиска сети.
В диалоговом окне состояния алгоритма поиска сети выводится так же информация что и в предыдущем примере решения задачи регрессии. За одним исключением, в данном случае производительность представляет собой долю правильно классифицируемых наблюдений. То есть, чем ближе производительность к единице, тем лучше.
В итоге, была отобрана сеть, с наилучшей производительностью, в смысле максимального процента правильно классифицированных наблюдений.

Рис.20. Параметры нейронной сети - классификатора.
Во вкладке Descriptive Statistics - Описательные статистики нажмем одноименную кнопку. В результате появится таблица статистик классификации. Столбцы этой таблицы представляют собой наблюдаемые классы, а строки - предсказанные классы. В идеале в этой матрице диагональные элементы должны быть отличны от нуля, а все остальные ячейки - нулевые. В таком случае процент неправильно классифицированных наблюдений равен нулю и производительность сети - 1. В нашем случае, на одном из наблюдений нейронная сеть ошиблась.

Рис.21. Статистики классификации.
Для того чтобы определить к какому кластеру принадлежит многомерное наблюдение, необходимо во вкладке Advanced - Дополнительно нажать кнопку User defined case - Пользовательское значение. Во вкладке Quick - Быстрый появившегося диалогового окна User defined case prediction - Прогноз значений пользователя необходимо нажать кнопку User defined input - Задать входные значения.

Рис.22. Вид диалогового окна User defined case prediction - Прогноз значений пользователя.
После того, как значения введены, необходимо нажать кнопку Predictions - Прогноз. В итоге нейронная сеть выдаст номер кластера, которому принадлежит заданный объект.
Классификатор построен. Чтобы не потерять результаты желательно сохранить конфигурацию нейронной сети, выполняющей классификацию. Для этого в диалоговом окне результатов поиска нейронной сети необходимо нажать кнопку ОК и перейти в стартовую панель модуля. В стартовой панели модуля выберите вкладку Networks/Ensembles - Сети/Ансамбли и воспользуйтесь кнопкой Save network file as ... - Сохранить файл нейронный сети как ...
Решение задачи регрессии в пределах одного кластера
После того, как мы разбили все множество данных на однородные куски и обладаем инструментом, позволяющим проводить классификацию, решение задачи регрессии становится простой и формальной процедурой. Указав на кластер, нам необходимо вычислить итоговое значение z для четверки предикторов.
Для решения этой задачи для каждого необходимо построить регрессионную нейронную сеть. Сценарий решения задачи регрессии разобран в первом разделе данной статьи. Воспользуемся этим же сценарием для решения задачи регрессии внутри четвертого кластера. Для остальных кластеров подход к решению аналогичный. Предварительно ограничим все множество данных четвертым кластером. Для этого в стартовой панели модуля SNN - Нейронные сети нажмем кнопку Select Cases - Выбор наблюдений и введем условие на включение наблюдений в анализ cluster=4.
Опустим описание поэтапного получения решения, т.к. данная процедура является стандартной. Обратим внимание на результаты. График наблюдаемых и предсказанных значений является хорошей иллюстрацией качественно построенной модели.

Рис.23. График наблюдаемых и предсказанных значений.
Увеличение различных областей графика так же не дает повода усомниться в том, что модель построена верно. Изучение значений остатков подтверждает выводы. Относительная ошибка не превышает 5%.
Для остальных кластеров были получены аналогичные результаты. Таким образом, задача решена.
Резюме
Данная работа представляет собой решение задачи обобщенной нелинейной регрессии z = f(x, y, factor1, factor2) с применением идеологии нейронных сетей, реализованной в пакете STATISTICA Neural Networks.
На первом этапе была предпринята попытка решить поставленную задачу сразу, т.е. подобрать нейронную сеть, предсказывающую поведение физического процесса независимо от типа исходных данных. В результате была найдена нейронная сеть с неплохой производительностью, но совершенно не удовлетворяющая требования к решению задачи в области малых значений x и y. Выявлено противоречие данных о природе изучаемого физического процесса теореме Колмогорова о полноте, т.к. функция процесса не является непрерывной.
Для того чтобы исправить положение, было принято решение разбить данные на однородные подгруппы, иначе провести кластеризацию. Комбинация методов Древовидной классификации и Кластеризации К-средних привела к хорошему результату. Было выявлено четыре кластера.
На следующем этапе был построен нейросетевой классификатор. Данный инструмент позволяет отнести многомерный объект (x, y, factor1, factor2) к одному из четырех кластеров. Созданный классификатор обладает производительностью близкой к 100%.
На завершающем этапе внутри каждого из кластеров строится регрессионная нейронная сеть. Точность предсказанных значений не хуже 5% для каждого из выделенных кластеров.
| |