Бинарная классификация

Бинарная классификация представляет собой задачу машинного обучения, в которой требуется отнести входные данные к одной из двух категорий. В JavaScript для таких задач удобна библиотека Brain.js, предоставляющая высокоуровневый интерфейс для работы с нейронными сетями.


Установка и подключение Brain.js

Для начала необходимо установить библиотеку через npm:

npm install brain.js

После установки можно подключить её в проекте:

const brain = require('brain.js');

Brain.js поддерживает несколько типов сетей, но для бинарной классификации чаще всего используют Feedforward Neural Network (полносвязная нейронная сеть), реализованную через класс NeuralNetwork.


Создание сети

Сеть создаётся с указанием конфигурации:

const net = new brain.NeuralNetwork({
  hiddenLayers: [3], // один скрытый слой с 3 нейронами
  activation: 'sigmoid' // функция активации
});

Ключевые параметры:

  • hiddenLayers — массив, задающий количество и размер скрытых слоев.
  • activation — функция активации, влияющая на способность сети различать сложные паттерны. Для бинарной классификации чаще применяются sigmoid или tanh.

Подготовка данных

Для бинарной классификации данные должны быть представлены в виде массива объектов:

const trainingData = [
  { input: { feature1: 0, feature2: 1 }, output: { class0: 1 } },
  { input: { feature1: 1, feature2: 0 }, output: { class1: 1 } },
  { input: { feature1: 1, feature2: 1 }, output: { class0: 1 } },
  { input: { feature1: 0, feature2: 0 }, output: { class1: 1 } },
];

Особенности:

  • Входные данные (input) — объект, где ключи соответствуют признакам, а значения нормализованы (обычно в диапазоне 0–1).
  • Выходные данные (output) — объект с двумя ключами, представляющими классы. Для бинарной классификации достаточно двух ключей, где 1 соответствует принадлежности к классу, а 0 — к другому.

Обучение сети

Обучение выполняется методом train:

net.train(trainingData, {
  iterations: 20000, // максимальное количество итераций
  learningRate: 0.1, // скорость обучения
  log: true,          // вывод прогресса в консоль
  logPeriod: 1000     // вывод каждые 1000 итераций
});

Параметры обучения:

  • iterations — количество проходов по данным, напрямую влияет на точность и время обучения.
  • learningRate — определяет скорость корректировки весов сети. Слишком высокий может вызвать нестабильность, слишком низкий — медленное обучение.
  • log и logPeriod — удобны для отслеживания процесса обучения и визуальной оценки сходимости.

Проверка работы сети

После обучения сеть готова к предсказаниям:

const output = net.run({ feature1: 1, feature2: 0 });
console.log(output);

Вывод представляет собой объект с вероятностями для каждого класса:

{ "class0": 0.2, "class1": 0.8 }

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


Настройка и улучшение точности

  • Количество нейронов и слоев: увеличение числа нейронов в скрытых слоях позволяет сети выявлять более сложные зависимости, но может привести к переобучению.
  • Функция активации: для бинарной классификации чаще всего sigmoid или tanh. relu можно использовать при больших наборах данных.
  • Нормализация входных данных: значения признаков должны быть приведены к диапазону 0–1 или -1–1. Это ускоряет сходимость сети.
  • Регуляризация: Brain.js поддерживает momentum, позволяющий сглаживать изменения весов и снижать риск переобучения.

Сохранение и загрузка модели

Сохранение обученной сети позволяет использовать её без повторного обучения:

const json = net.toJSON(); // сериализация в JSON

Для восстановления:

const net2 = new brain.NeuralNetwork();
net2.fromJSON(json);

Это важно для проектов с долгим обучением или для интеграции в веб-приложения.


Применение бинарной классификации

  • Классификация текста: определение положительных и отрицательных отзывов.
  • Анализ изображений: распознавание наличия или отсутствия объекта.
  • Финансовые прогнозы: классификация риска (например, высокий/низкий).

Brain.js подходит для небольших и средних задач бинарной классификации, где важна простота и быстрая интеграция в JavaScript-приложения.


Особенности работы с бинарными данными

  • Выходной слой обычно состоит из одного или двух нейронов. В случае одного нейрона выходная величина интерпретируется как вероятность принадлежности к классу 1 (0 — класс 0).
  • Функция потерь: Brain.js по умолчанию использует среднеквадратичную ошибку, которая подходит для небольших наборов данных, но для более сложных задач лучше учитывать другие подходы (например, кросс-энтропию вручную при необходимости).

Хотите, я могу подготовить полноценный пример проекта с реальными данными, где бинарная классификация на Brain.js будет реализована шаг за шагом? Это поможет увидеть работу сети «вживую» и понять все нюансы обучения.