Предсказание непрерывных значений

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


Типы сетей для регрессии

В Brain.js регрессионные задачи решаются с использованием Feedforward Neural Network или Recurrent Neural Network. Для предсказания непрерывных чисел чаще применяется NeuralNetwork с линейной или сигмоидной функцией активации на выходном слое.

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

const net = new brain.NeuralNetwork({
  activation: 'sigmoid', // можно также 'relu' или 'leaky-relu'
  hiddenLayers: [10, 10], // два скрытых слоя по 10 нейронов
  learningRate: 0.01
});

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

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

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

Для регрессии данные должны быть нормализованы в диапазон [0,1] или [-1,1]. Нормализация необходима для стабильного обучения сети.

function normalize(value, min, max) {
  return (value - min) / (max - min);
}

function denormalize(normValue, min, max) {
  return normValue * (max - min) + min;
}

const trainingData = [
  { input: [normalize(10, 0, 100)], output: [normalize(20, 0, 100)] },
  { input: [normalize(50, 0, 100)], output: [normalize(60, 0, 100)] },
  { input: [normalize(90, 0, 100)], output: [normalize(95, 0, 100)] },
];

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


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

Обучение сети происходит через метод .train(). Для регрессии важно правильно подобрать количество итераций и порог ошибки.

net.train(trainingData, {
  iterations: 20000,
  errorThresh: 0.0005,
  log: true,
  logPeriod: 1000,
  learningRate: 0.01
});
  • iterations — максимальное количество шагов обучения.
  • errorThresh — порог ошибки, при достижении которого обучение остановится.
  • log и logPeriod — контроль прогресса обучения.

Совет: слишком маленький errorThresh может привести к переобучению, а слишком большой — к неточным предсказаниям.


Прогнозирование непрерывных значений

После обучения можно использовать метод .run() для предсказания.

const normalizedPrediction = net.run([normalize(30, 0, 100)]);
const prediction = denormalize(normalizedPrediction[0], 0, 100);
console.log(prediction); // например, 35.7

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

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

Улучшение точности

  1. Расширение набора данных — больше примеров повышает способность сети к обобщению.
  2. Изменение архитектуры сети — увеличение количества скрытых слоев или нейронов может улучшить точность, но увеличивает риск переобучения.
  3. Регулировка learningRate — адаптация скорости обучения помогает модели быстрее сходиться без нестабильности.
  4. Функция активации — для регрессии relu или leaky-relu часто дают более точные результаты, чем сигмоид.

Применение в реальных задачах

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

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