Создание обучающей выборки

Brain.js — это JavaScript-библиотека для работы с нейронными сетями, предоставляющая удобный интерфейс для создания, обучения и использования моделей машинного обучения. Ключевым этапом работы с любой нейронной сетью является подготовка корректной обучающей выборки, которая напрямую влияет на точность и качество предсказаний модели.


Форматы данных для обучения

В Brain.js используются несколько основных форматов представления данных:

  1. Формат объектов (object format) Используется для данных, где каждая запись представлена объектом с входными (input) и выходными (output) значениями.

    const trainingData = [
      { input: { r: 0.03, g: 0.7, b: 0.5 }, output: { light: 1 } },
      { input: { r: 0.9, g: 0.1, b: 0.2 }, output: { dark: 1 } }
    ];

    Важные моменты:

    • Значения входных и выходных данных должны быть нормализованы в диапазон от 0 до 1.
    • Выходные значения могут быть категориальными, представленными бинарным кодированием.
  2. Формат массивов (array format) Используется для числовых данных, где каждый пример представляет собой массив входных и соответствующих выходных значений:

    const trainingData = [
      { input: [0.03, 0.7, 0.5], output: [1, 0] },
      { input: [0.9, 0.1, 0.2], output: [0, 1] }
    ];

    Такой формат особенно удобен для многомерных числовых задач, например для работы с временными рядами или финансовыми данными.


Нормализация данных

Нормализация — критически важный этап подготовки обучающей выборки. Brain.js требует, чтобы входные данные находились в диапазоне [0,1], а для бинарной классификации выходные значения также должны быть 0 или 1.

Примеры методов нормализации:

  • Деление числовых данных на максимальное значение.
  • Преобразование категориальных значений в бинарные векторы (one-hot encoding).
function normalize(value, min, max) {
  return (value - min) / (max - min);
}

Структура обучающей выборки

Ключевые компоненты обучающей выборки:

  • Входные данные (input): характеристики или признаки, используемые для предсказания.
  • Выходные данные (output): целевые значения, которые сеть должна научиться предсказывать.

Для сложных задач рекомендуется:

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

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

const trainingData = [
  { input: { r: 0.9, g: 0.1, b: 0.1 }, output: { red: 1 } },
  { input: { r: 0.1, g: 0.9, b: 0.1 }, output: { green: 1 } },
  { input: { r: 0.1, g: 0.1, b: 0.9 }, output: { blue: 1 } },
  { input: { r: 0.5, g: 0.5, b: 0.5 }, output: { gray: 1 } }
];

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


Размер и качество выборки

Для повышения точности модели:

  • Минимальное количество примеров на класс должно составлять несколько десятков.
  • Для сложных задач с множеством признаков необходимо несколько сотен или тысяч примеров.
  • Использование шумных или неполных данных может привести к переобучению.

Разделение выборки

Для оценки работы сети обучающую выборку часто делят на:

  • Обучающую часть — для настройки весов сети.
  • Тестовую часть — для проверки точности предсказаний.

Пример простого разделения данных:

const train = trainingData.slice(0, Math.floor(trainingData.length * 0.8));
const test = trainingData.slice(Math.floor(trainingData.length * 0.8));

Это позволяет контролировать качество обучения и предотвращает переобучение.


Советы по созданию качественной выборки

  • Сбалансированность классов: все категории должны быть равномерно представлены.
  • Разнообразие примеров: включение различных вариантов входных данных улучшает обобщение сети.
  • Избегание пропусков: все признаки должны быть представлены в каждом примере.
  • Корректная нормализация: соблюдение диапазона [0,1] для всех входов и выходов.

Итоговая структура данных для Brain.js

Обучающая выборка должна представлять собой массив объектов с двумя ключами: input и output, где:

  • input — объект или массив чисел от 0 до 1.
  • output — объект или массив чисел от 0 до 1, описывающий ожидаемый результат.

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