Сепаратор

Для хранения классов сепараторов предназначен пакет libvmr.separators

Впрочем в нём храниться всего один единственный класс сепаратора, используемого в VMR с названием Separator.

Задача сепаратора заключается в том, чтобы разделить выборку с примерами, преобразованную с помощью парсера в двумерный числовой массив на две части:

  1. Обучающую. Она предназначена для создания модели бинарного классификатора
  2. Контрольную. Она предназначена для проверки корректности модели бинарного классификатора.

Разделение происходит в конструкторе класса:

public Separator(double[][] patterns)

где: patterns - общая выборка с примерами в виде двумерного массива.

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

После чего берётся минимальное количество примеров для одного из классов из итератора наименьшего размера - min. Размер обучающей выборки будет соответствовать этому количеству.

Далее берём максимальное количество примеров для второго класса из итератора наибольшего размера - max.

Размер контрольной выборки будет равен:

controlsize = (max + min) / 2

Далее необходимо случайным образом перемешать все примеры в итераторах, равномерно распределить примеры, если они так или иначе были отсортированы по каким-либо значениям.

Обучающая и контрольная выборки представлены в классе в виде полей с именами: trainsamples и testsamples.

После этого перемещаем примеры из обоих итераторов в обучающую выборку, взяв min примеров из каждого итератора.

В контрольную выборку примеры перемещаются:

  • Все из итератора с наименьшим количеством примеров
  • В итераторе с наибольшим количеством примеров оставляем (max - min) / 2 примеров, а остальные перемещаем в контрольную выборку.

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


Юрий Решетов
Comments