Классификация данных при помощи нейронных сетей

Определённым компромиссом между параметрическим и метрическими методами является использование для решении задач классификации нейронных сетей. Нейронные сети являются непараметрическими моделями, не требующими предположений о вероятностном распределении данных, но при этом и не используют меры расстояний. Это делает их универсальными классификаторами, позволяя получать результаты даже в случаях, когда параметрические и метрические классификаторы не обеспечиваю приемлемого решения.

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

В настоящее время разработано большое количество различных видов классификаторов, для построения которых используются как статистические методы (логистическая регрессиядискриминантный анализ), так и методы машинного обучения (нейронные сетидеревья решенийметод k-ближайших соседеймашины опорных векторов и др.).

Необходимость использования в анализе данных большого числа разнообразных методов классификации, обусловлена тем, что решаемые с её помощью задачи могут иметь свои особенности, связанные, например, с числом классов (бинарная классификация или с несколькими классами) или с представлением исходных данных — их объёмом, размерностью и качеством, что требует выбора адекватного классификатора. Поэтому выбор классификатора, соответствующего особенностям решаемой задачи анализа, является важным фактором получения правильного решения.

Различные виды классификаторов имеют свои преимущества и недостатки. Так, классификаторы, в которых используются методы статистики имеют хорошую математическую обоснованность, но при этом сложны в использовании и требуют знания вероятностного распределения исходных данных и оценки его параметров (поэтому их называют параметрическими), а также имеют фиксированную структуру модели. Кроме этого, статистические методы оценивают только вероятность принадлежности объекта классу, но не «объясняют» почему.

Классификаторы, основанные на машинном обучении не требуют оценки параметров распределения исходных данных, а мера сходства в них формализуется с помощью функции расстояния (обычно, евклидова). Такие классификаторы называются метрическими. Как правило, они проще в реализации и использовании, чем параметрические, а их результаты удобнее для интерпретации и понимания. Но при этом метрические классификаторы являются эвристическими моделями — обеспечивают решение только в ограниченном числе практически значимых случаев, могут дать неточное или не единственное решение. Поэтому использовать их результаты нужно с известной долей осторожности.

Определённым компромиссом между параметрическим и метрическими методами является использование для решении задач классификации нейронных сетей (НС). Действительно, НС являются непараметрическими моделями, не требующими предположений о вероятностном распределении данных, но при этом и не используют меры расстояний. Это делает их универсальными классификаторами, позволяя получать результаты даже в случаях, когда параметрические и метрические классификаторы не обеспечиваю приемлемого решения.

Особенности применения НС в качестве классификаторов

Следует отметить, что задача классификации для НС, вообще говоря, не является основной (как, например, для деревьев решений или алгоритма k ближайших соседей). Изначально, основной задачей для НС является численное предсказание (когда на входе и выходе модели числовые значения, что иногда не совсем корректно называют регрессией).

Однако, используя специальные способы представления данных, можно адаптировать НС для работы с категориальными данными, т.е. получать на вход и формировать на выходе категориальные значения. Для этого категориальные признаки соответствующим образом кодируются с помощью числовых значений.

Тем не менее, можно выделить ряд преимуществ использования НС в качестве классификаторов:

  • НС являются самообучающимися моделями, работа которых практически не требует вмешательства пользователя;
  • НС являются универсальными аппроксиматорами, позволяющими аппроксимировать любую непрерывную функцию с приемлемой точностью;
  • НС являются нелинейными моделями, что позволяет эффективно решать задачи классификации даже при отсутствии линейной разделимости классов (рис. 1).

Рисунок 1. Линейная разделимость классов

Следует отметить, что каких-либо специальных нейросетевых архитектур для классификации не существует. Наиболее часто используемой для классификации архитектурой НС являются сети прямого распространения, на входные нейроны которых подаются значения признаков классифицируемого объекта, а на выходе формируется метка или числовой код класса. Обычно используются многослойные персептроны. В таких сетях элементы вектора признаков поступают на входные нейроны и распределяются на все нейроны первого скрытого слоя НС, и в результате размерность задачи изменяется.

Последующие слои, таким образом, разделяют объекты на классы в пространстве признаков более высокой размерности, чем исходное. Например, если размерность вектора признаков исходных данных равна 4, и скрытый слой содержит 6 нейронов, то выходной слой производит разбиение объектов на классы в 6-мерном пространстве.

Это позволяет сделать процесс более эффективным: правильно подобрав конфигурацию и параметры НС можно получить хорошие результаты классификации даже в тех случаях, когда классификаторы других типов, работающие только в размерности обучающих данных, не обеспечивают приемлемых результатов. Недостатком является то, что конфигурация сети, наилучшим образом аппроксимирующая функцию разделения классов в пространстве признаков, заранее неизвестна. Поэтому приходится подбирать её экспериментально, либо использовать опыт аналогичных решений.

Если распределение классов таково, что для их разделения требуется сложная функция, размерность НС может оказаться неприемлемо большой. В этом случае проблему можно снять с помощью специальной предобработки исходных данных.

Подготовка исходных данных

Какими бы совершенным ни были методы и алгоритмы, используемые для классификации, они не дадут корректных результатов, если применяются к грязным «данным». Поэтому первым шагом построения классификационной модели на основе НС, является предобработка и очистка данных.

Первым шагом в этом направлении является отбор признаков, значимых с точки зрения различия классов. Действительно, объекты предметной области могут описываться большим числом признаков. Но не все они позволяют надёжно различать объекты различных классов. Например, если объекты разных классов имеют примерно одинаковый размер, то использование «габаритных» признаков не имеет смысла. Не желательно также использовать признаки, значения которых являются случайными и не отражают закономерностей распределения объектов по классам.

Кроме этого важную роль играет выбор количества используемых признаков. С одной стороны, чем больше признаков применяется при построении классификатора, тем больше информации используется для разделения классов. Но при этом возрастают вычислительные затраты и требования к размеру НС (количеству настраиваемых в процессе обучения параметров — весов связей нейронов). С другой стороны, снижение количества используемых признаков ухудшают разделимость классов. Например, может сложиться ситуация, когда у объектов различных классов окажутся одинаковые значения признаков и возникнет противоречие.

Например, в задаче классификации заёмщиков на «плохих» и «хороших» можно оставить всего два признака «Доход» и «Возраст». Тогда весьма вероятно, что два заёмщика с одним и тем же возрастом и доходом окажутся в разных классах. Чтобы сделать заёмщиков различимыми нужно добавить ещё один признак, например, число иждивенцев. Таким образом, отбор признаков для обучения классификатора на основе НС является поиском компромисса.

Ещё одним важным видом предобработки обучающих данных является нормализация значений признаков к диапазону 0..1. Нормализация необходима, поскольку классифицирующие признаки имеют различную физическую природу и их значения могут различаться на несколько порядков (например «Доход» и «Возраст»).

Кроме этого, перед построением классификатора на основе НС следует провести профайлинг данных с целью оценки их качества, и при необходимости применить к ним средства очистки данных: заполнение пропусков, подавление аномальных значений и выбросов, исключение дубликатов и противоречий.

Кодирование выходных значений

Принципиальным отличием задачи классификации от задачи численного предсказания является то, что выходная переменная дискретная (метка класса или её числовой код). Поскольку НС являются моделями, использующими обучение с учителем, переменная класса должна быть задана для каждого обучающего примера.

В простейшем случае, если классификация бинарная, задача может быть решена с помощью НС с единственным нейроном выходного слоя, на выходе которого формируется два возможных состояния (например, 0 и 1). Если классов несколько, то необходимо решать проблему их представления на выходе сети. На практике обычно используется выходной вектор, элементами которого являются метки или номера классов.

При этом отношение объекта к классу определяется установкой в 1 соответствующего элемента выходного вектора (i-го элемента для j-го класса), в то время, как остальные элементы устанавливаются в 0. Тогда, например, второму классу будет соответствовать единица на 2-м выходе сети и 0 на остальных (рис. 2).

Рисунок 2. Представление нескольких классов на выходе сети

Для кодирования могут использоваться и другие значения кроме 1. Но при интерпретации результата обычно считается, что класс определяется номером выхода сети, на котором появилось максимальное значение. Например, если на выходе сети был сформирован вектор выходных значений (0.2, 0.6, 0.4), то максимальное значение имеет второй компонент вектора. Следовательно, класс, к которому относится этот пример, будет 2.

Очевидно, что при таком способе кодирования, чем сильнее максимальное значение отличается от остальных, тем выше уверенность в том, что сеть отнесла объект именно к данному классу. Формально эту уверенность можно ввести в виде показателя, равного разности между максимальным значением на входе сети (которое, собственно, и определяет принадлежность к классу) и ближайшим к нему значением на другом выходе.

Например, для рассмотренного выше примера уверенность сети в том, что пример относится ко второму классу, определится как разность между второй и третьей компонентой вектора и равна 0.6−0.4=0.2. Соответственно чем выше уверенность, тем больше вероятность того, что сеть дала правильный ответ. Этот метод кодирования является самым простым, но не всегда самым эффективным способом представления классов на выходе сети.

Например, в другом способе представления, номер класса кодируется в двоичной форме в выходном векторе сети. Тогда если число классов равно 5, то для их представления будет достаточно трёх выходных нейронов, а код, соответствующий, скажем, 3-му классу будет 011. Недостатком подхода является отсутствие возможности использования показателя уверенности, поскольку разность между любыми элементами выходного вектора всегда равна 0 или 1. Следовательно изменение любого элемента выходного вектора неминуемо приведёт к ошибке. Поэтому для увеличения «расстояния» между классами удобно использовать код Хэммминга, который позволит точность классификации.

Ещё один подход заключается в разбиении задачи с k классами на k∗(k−1)/2 подзадач с двумя классами каждая (кодирование «2 на 2»). Подзадача в данном случае заключается в том, что сеть определяет наличие одной из компонент вектора. Т.е. исходный вектор разбивается на группы по два компонента в каждой таким образом, чтобы в них вошли все возможные комбинации компонент выходного вектора. Из комбинаторики известно, что число этих групп можно определить как количество неупорядоченных выборок без повторений по два из исходных компонент, то есть:

A_{k}^{n}=\frac{k!}{n!(k-n)!}=\frac{k!}{2!(k-2)!}=\frac{k(k-1)}{2}

Тогда, например, для задачи с четырьмя классами мы имеем 6 выходов (подзадач) распределенных следующим образом:

№ подзадачи (выхода)Компоненты выхода
11-2
21-3
31-4
42-3
52-4
64-4

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

№ классаКомпоненты выхода
11, 2, 3
21, 4, 5
32, 4, 6
43, 5, 6

Этот метод кодирования во многих задачах позволяет получить лучшие результаты классификации, чем классические подходы.

Выбор размера сети

Для построения эффективно работающего классификатора очень важно правильно выбрать размер сети, а именно количество связей между нейронами, которые настраиваются в процессе обучения и обрабатывают входные данные при её работе. С одной стороны, если весов в сети будет мало, то она не сможет реализовывать сложные функции разделения классов. С другой стороны, увеличение числа связей приводит к возрастанию информационной ёмкости модели (веса работают как элементы памяти).

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

Чтобы правильно выбрать размер сети применяют два подхода – конструктивный и деструктивный. Первый заключается в том, что вначале берется сеть минимального размера, и затем её постепенно увеличивают до достижения требуемой точности. При этом после каждого увеличения ее заново обучают. Также существует так называемый метод каскадной корреляции, при котором после окончания каждой эпохи обучения происходит корректировка архитектуры сети с целью минимизации ошибки.

При деструктивном подходе вначале берется сеть завышенного размера, и затем из нее удаляются нейроны и связи, которые оказывают наименьшее влияние на точность классификатора. При этом полезно помнить следующее правило: число примеров в обучающем множестве должно быть больше числа настраиваемых весов сети. В противном случае сеть не приобретёт обобщающую способность и будет выдавать на новых данных произвольные значения.

Для контроля обобщающей способности сети, на основе которой строится классификатор, полезно использовать тестовое множество, формируемое из случайно отбираемых примеров обучающего набора данных. Примеры тестового множества не участвуют в процессе обучения сети (т.е. не влияют на подстройку её весов), а просто подаются на её вход вместе с обучающими примерами.

Если сеть показывает высокую точность как на обучающем, так и на тестовом множестве (примеры которого, по сути, играют роль новых данных), то можно говорить о том, что сеть приобрела обобщающую способность. Если сеть выдаёт хорошие результаты только на обучающих данных и плохие на тестовых, то обобщающая способность ею не приобретена.

Часто ошибку сети на обучающем множестве называют ошибкой обучения, а на тестовом — ошибкой обобщения. Соотношение размеров обучающего и тестового множеств, в принципе, может быть любым. Главное, чтоб в обучающем множестве оставалось достаточно примеров для качественного обучения модели.

Очевидным способом улучшения обобщающей способности сети является увеличение числа обучающих примеров или сокращение числа связей. Первое не всегда возможно из-за ограниченного объема набора данных и возрастания вычислительных затрат. Сокращение же числа связей приводит к ухудшению точности сети. Поэтому выбор размера модели часто оказывается достаточно сложной задачей, требующей многократных экспериментов.

Выбор архитектуры сети

Как отмечалось выше, никаких специальных архитектур нейросетей для решения задач классификации не используется. Типичным решением здесь являются плоскослоистые сети с последовательными связями (персептроны). Обычно опробуется несколько конфигураций сети с различным количеством нейронов и способов организации их в слои.

При этом основным показателем для выбора является объем обучающего множества и достижения обобщающей способности сети. Обычно используется алгоритм обучения Back Propagation (обратного распространения) с валидационным множеством.

Алгоритм построения классификатора

Построение классификатора на основе нейронной сети содержит ряд шагов.

  1. Подготовка данных
    1. Составить базу данных из примеров, характерных для данной задачи
    2. Разбить всю совокупность данных на два множества: обучающее и тестовое (возможно разбиение на 3 множества: обучающее, тестовое и валидационное)
  2. Предобработка данных
    1. Произвести отбор признаков, значимых с точки зрения задачи классификации.
    2. Выполнить трансформацию и при необходимости очистку данных (нормализацию, исключение дубликатов и противоречий, подавление выбросов и т.д.). В результате желательно получить линейно разделяемое по классам пространство множества примеров.
    3. Выбрать систему кодирования выходных значений (классическое кодирование, «2 на 2»-кодирование и т.д.)
  3. Конструирование, обучение и оценка качества сети
    1. Выбрать топологию сети: количество слоев, число нейронов в слоях и т.д.
    2. Выбрать активационную функцию нейронов (например, логистическую, гипертангенс и др.)
    3. Выбрать алгоритм обучения сети
    4. Оценить качество работы сети на основе валидационного множества, или другого критерия, оптимизировать архитектуру (уменьшение весов, прореживание пространства признаков)
    5. Остановится на варианте сети, который обеспечивает наилучшую способность к обобщению и оценить качество работы по тестовому множеству
  4. Использование и диагностика
    1. Выяснить степень влияния различных факторов на принимаемое решение (эвристический подход)
    2. Убедиться, что сеть обеспечивает требуемую точность классификации (число неправильно распознанных примеров мало)
    3. При необходимости вернуться на этап 2, изменив способ представления примеров или изменив базу данных
    4. Практически использовать сеть для решения задачи

Для того, чтобы построить эффективно работающий классификатор, необходимо иметь качественные исходные данные. Никакой из методов построения классификаторов, основанный на нейронных сетях или статистических методах, никогда не обеспечит нужного качества модели, если имеющийся набор примеров не будет достаточно полным и репрезентативным для решаемой задачи.

 

Другие материалы по теме:

Алгоритмы кластеризации на службе Data Mining

Loginom Community Edition - аналитика, доступная каждому

Орешков Вячеслав
Рязанский государственный радиотехнический университет, Доцент кафедры САПР ВС
#нейросеть

Смотрите также