Постановка задачи регрессии

Основные концепции

Регрессия — это задача предсказания непрерывного значения на основе входных данных. В отличие от классификации, где результат ограничен конечным набором категорий, регрессия требует моделирования зависимостей числового характера. В контексте библиотеки Brain.js регрессионная задача реализуется через сети с обратным распространением ошибки, чаще всего с использованием многослойного перцептрона (feedforward neural network).

Ключевые элементы регрессионной модели:

  • Входной слой (Input Layer) — принимает вектор признаков, описывающих объект или событие. Каждый входной нейрон соответствует одной переменной.
  • Скрытые слои (Hidden Layers) — обеспечивают возможность моделирования сложных нелинейных зависимостей. Количество слоёв и нейронов напрямую влияет на способность сети к аппроксимации функции.
  • Выходной слой (Output Layer) — содержит один или несколько нейронов, если требуется предсказание одного или нескольких числовых значений.

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

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

  1. Нормализация Данные должны быть приведены к диапазону [0, 1] или [-1, 1]. Это обеспечивает устойчивость обучения и предотвращает «затухание» градиентов при обучении сети. В Brain.js нормализация обычно делается вручную с использованием линейного масштабирования:

    function normalize(value, min, max) {
      return (value - min) / (max - min);
    }
    
    function denormalize(value, min, max) {
      return value * (max - min) + min;
    }
  2. Форматирование данных для сети Brain.js ожидает объекты вида { input: [...], output: [...] }. Для регрессии output содержит массив с одним элементом — числовым значением:

    const trainingData = [
      { input: [0.1, 0.5], output: [0.7] },
      { input: [0.4, 0.9], output: [0.2] }
    ];
  3. Разделение на обучающую и тестовую выборки Обычно выделяют 70–80% данных для обучения и 20–30% для проверки точности модели.

Настройка сети

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

  • hiddenLayers — массив чисел, задающих количество нейронов в каждом скрытом слое. Например, [10, 10] создаст два скрытых слоя по 10 нейронов каждый.
  • activation — функция активации ('sigmoid', 'relu', 'leaky-relu'), влияющая на нелинейность модели.
  • learningRate — скорость обучения, обычно в диапазоне 0.01–0.3.
  • errorThresh — порог ошибки для завершения обучения.

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

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

const net = new brain.NeuralNetwork({
  hiddenLayers: [10, 10],
  activation: 'relu',
  learningRate: 0.01
});

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

Обучение осуществляется методом train, который принимает массив объектов с входными и выходными значениями и настройки процесса обучения:

const trainingOptions = {
  iterations: 20000,
  errorThresh: 0.005,
  log: true,
  logPeriod: 1000
};

net.train(trainingData, trainingOptions);
  • iterations — максимальное количество эпох.
  • errorThresh — минимально допустимая ошибка.
  • log и logPeriod — позволяют отслеживать процесс обучения каждые N итераций.

Оценка и использование модели

После обучения сети необходимо проверить точность на тестовой выборке. Важно использовать денормализованные значения для интерпретируемых предсказаний:

const testInput = [0.2, 0.8];
const normalizedPrediction = net.run(testInput);
const prediction = denormalize(normalizedPrediction[0], minOutput, maxOutput);

Ключевые моменты проверки:

  • Ошибка предсказания измеряется через среднеквадратичную ошибку (MSE) или среднюю абсолютную ошибку (MAE).
  • Анализ остатков (разница между предсказанным и фактическим значением) позволяет выявить систематические отклонения и необходимость изменения архитектуры сети или масштабирования данных.

Рекомендации по архитектуре

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

Итоговые принципы постановки задачи

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

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