Типы данных, с которыми работает Brain.js

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


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

В Brain.js данные передаются в виде числовых массивов или объектов. Основные форматы:

  1. Массивы чисел Простейший способ передачи данных — это массив чисел, где каждый элемент соответствует определённой характеристике (feature).

    Пример:

    const trainingData = [
      { input: [0, 0], output: [0] },
      { input: [0, 1], output: [1] },
      { input: [1, 0], output: [1] },
      { input: [1, 1], output: [0] },
    ];

    Здесь input — это вектор признаков, а output — ожидаемый результат. Такой формат применяется для задач классификации и регрессии.

  2. Объекты с числовыми значениями Данные могут быть представлены объектами, где ключи — это имена признаков. Это удобно для работы с разнородными данными и позволяет не запоминать порядок элементов массива.

    Пример:

    const trainingData = [
      { input: { red: 0, green: 1, blue: 0 }, output: { light: 1 } },
      { input: { red: 1, green: 0, blue: 0 }, output: { dark: 1 } },
    ];
  3. Нормализация данных Brain.js ожидает, что все входные значения будут в диапазоне от 0 до 1. Если данные находятся в другом диапазоне, требуется нормализация.

    Пример нормализации:

    const normalizedInput = originalValue / maxValue;

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

Выходные данные определяют, что нейронная сеть должна предсказывать. Их формат зависит от типа задачи:

  1. Бинарная классификация Используются значения 0 и 1, либо объекты с ключами, где 1 обозначает правильный класс:

    { output: [0] } или { output: { yes: 1, no: 0 } }
  2. Множественная классификация Для задач с несколькими категориями создаются массивы с вероятностями или объекты с ключами, где сумма значений может быть равна 1:

    { output: { cat: 0.8, dog: 0.2 } }
  3. Регрессия Для предсказания числовых значений используются значения от 0 до 1, которые потом можно денормализовать в исходный диапазон:

    { output: [0.72] }

Особенности представления данных для разных типов сетей

  1. Feedforward Neural Network (FFNN)

    • Работает с массивами или объектами чисел.
    • Каждый входной узел соответствует одному признаку.
    • Выходной слой зависит от задачи: один узел для бинарной классификации, несколько — для множественных классов.
  2. Recurrent Neural Network (RNN)

    • Предпочтителен формат последовательностей.
    • Входные данные подаются в виде массивов массивов или строк (для текстовой обработки).
    • Объекты с ключами также поддерживаются, но последовательность элементов должна сохраняться.
  3. LSTM и GRU сети

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

Преобразование данных для Brain.js

  • One-hot кодирование: Для категориальных признаков значения превращаются в массивы, где активен только один элемент.

    const colors = { red: [1,0,0], green: [0,1,0], blue: [0,0,1] };
  • Масштабирование чисел: Любое числовое значение должно быть преобразовано в диапазон 0–1.

  • Токенизация текста: Для работы с текстовыми RNN данные разбиваются на символы или слова, которые затем кодируются в числовые массивы.


Ключевые правила работы с данными

  • Все входные данные должны быть одного формата и одинаковой длины.
  • Все выходные данные должны соответствовать задачам классификации или регрессии, быть в диапазоне 0–1.
  • Перед обучением необходимо проверить данные на пропуски и корректность формата.
  • Последовательность подачи данных критична для рекуррентных сетей.

Использование корректно подготовленных данных напрямую влияет на скорость сходимости сети и точность предсказаний. Brain.js предоставляет гибкость в представлении данных, но строгие требования к диапазону и типу значений обеспечивают стабильность и предсказуемость работы моделей.