Нормировщик

Классы для нормирования сырых данных находятся в пакете libvmr.normsetters

Интерфейс для этих классов именуется NormSetter.

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

Для решения этой задачи, классы реализующие интерфейс NormSetter содержат два одноимённых метода:

double[][] normSetting(double[][] samples)

и

double[] normSetting(double[] pattern)

Как видно по аргументам, первый метод нормирует двумерный массив - обучающую выборку, а второй метод обрабатывает одномерный массив - какой то отдельный пример.

Задача первого метода - предварительная подготовка информации из выборки для алгоритма машинного обучения. Дополнительно, в данном методе все нормированные значения объясняющих переменных будут занесены в отдельный двумерный массив возвращаемый данным методом, а все значения зависимой переменной для каждого из примеров будут занесены в отдельный одномерный массив, возвращаемый отдельным методом: double[] getIdeals().
Задача второго метода - предварительная обработка входных признаков для какого либо примера предъявляемого уже готовой модели для классификации.

Как производится нормировка для обучающей выборки?

  1. Сначала в каждом столбце обучающей выборки находятся максимальное - max и минимальное - min, значения которых запоминаются в одномерных массивах с идентификаторами приватных полей: maxs и mins.
  2. После чего создается двумерный массив такой же размерности, как и массив сырых данных, куда переносятся нормированные значения в ячейки с аналогичной индексацией, что и в исходном массиве, но преобразованные по формуле:

normvalue = 2 * (rawvalue - min) / (max - min) - 1

где:

rawwalue - ненормированное значение ячейки в массиве сырых данных

normvalue - нормированное значение ячейки в массиве нормированных данных

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

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

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

Ещё один метод, который содержится в интерфейсе NormSetter с идентификатором NormSettingToString(), возвращает строку в виде исходного кода нормирования переменных для модели на языке Java.


Юрий Решетов


Comments