Главная       Скачать       Коммерческая поддержка       FAQ       Forum       О нас       Английская версия

Общие концепции

Содержание

    1 Формат данных
    2 Кодирование номинальных переменных
    3 Кодирование пропущенных значений
    4 Типовые коды ошибок
    5 Классификаторы в ALGLIB и условные вероятности
    6 Ошибка модели

Формат данных

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

Замечание #1
Способ кодирования данных в задачах классификации несколько отличается от принятого во многих других программных пакетах - например, в ряде нейросетевых библиотек принято кодировать принадлежность образа к одному из классов при помощи вектора размерности NClasses, установив в 1 соответствующую координату, а остальные сделав равными нолю. Это различие следует учитывать при одновременном использовании ALGLIB и других программных пакетов.

Кодирование номинальных переменных

Номинальные переменные могут быть закодированы несколькими способами: в виде целого числа, с использованием кодирования "1-of-N" или кодирования "1-of-N-1". За редким исключением (Байесовский классификатор) алгоритмы пакета ALGLIB могут работать с любым способом кодирования, не требуя информации, какие переменные являются вещественными, а какие номинальными, и как они закодированы. Алгоритм просто принимает матрицу вещественных чисел и работает с ней, не вдаваясь в особенности её внутренней структуры. Это обеспечивает гибкость и простоту в использовании. Однако различные способы кодирования по-разному влияют на быстродействие и качество работы алгоритмов. Для улучшения работы вычислительных подпрограмм рекомендуется придерживаться следующей схемы представления данных:

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

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

На момент написания статьи ни один из алгоритмов, кроме Байесовского классификатора, не может работать с пропущенными значениями. Однако можно обойти это ограничение, добавив к возможным значениям переменной ещё одно значение, обозначающее пропуск. Например, если переменная принимает значения "0", "1", "2", то можно закодировать непропущенные значения, как "1 0 0 0", "0 1 0 0", "0 0 1 0", а пропущенное значение - как "0 0 0 1". Аналогом для вещественной переменной будет такой способ кодирования: непропущенное значение x кодируется как "x 0", а пропущенное - как "0 1".

Ещё одним вариантом является замена пропущенного значения средним (или наиболее вероятным) значением для данной переменной.

Типовые коды ошибок

Многие подпрограммы анализа данных принимают параметр-ссылку Info. На выходе из подпрограммы эта переменная содержит код возврата. Положительное значение обозначает успешное завершение работы, отрицательное - ошибку. Подпрограммы этого раздела решают схожие задачи, поэтому и коды ошибок у них образуют единую систему:

Классификаторы в ALGLIB и условные вероятности

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

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

Второй подход более гибок, чем первый, и более разумен. Откуда алгоритм классификации может знать, какими приоритетами руководствуется пользователь? В одних случаях требуется минимизировать ошибку на одном из классов - например, ошибочную классификацию письма, как спама. Тогда письмо будет классифицировано как спам, только если вероятность того, что оно НЕ спам, очень и очень мала (например, меньше 0.05%). В других случаях - все классы равноправны и можно просто выбрать класс с наибольшей условной вероятностью. Поэтому результатом работы всех алгоритмов классификации, входящих в пакет ALGLIB, является не класс, к которому относится объект, а вектор условных вероятностей.

Ошибка модели

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

Если речь идет о задаче классификации, то здесь можно использовать пять мер ошибки. Первая и наиболее широко известная - ошибка классификации (количество или процент неверно классифицированных случаев). Вторая, не менее известная мера ошибки - кросс-энтропия. В пакете ALGLIB используется средняя кросс-энтропия на элемент тестового множества, рассчитанная в битах (логарифм по основанию 2). Использование средней кросс-энтропии (вместо суммарной кросс-энтропии) позволяет получать сопоставимые оценки для различных тестовых множеств.

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

This article is intended for personal use only.

Скачать ALGLIB

C#

Исходный код на C#

Downloads page

 

C++

Исходный код на C++

Downloads page

 

C++, арифметика высокой точности

Исходный код на C++, использующий библиотеки MPFR/GMP.

Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.

Downloads page

 

FreePascal

Исходный код на Free Pascal.

Downloads page

 

Delphi

Исходный код на Delphi.

Downloads page

 

VB.NET

Исходный код на VB.NET.

Downloads page

 

VBA

Исходный код на VBA.

Downloads page

 

Python

Исходный код на Python (CPython и IronPython).

Downloads page

 

 

ALGLIB® - numerical analysis library, 1999-2017.
ALGLIB is registered trademark of the ALGLIB Project.