Brain.js — это JavaScript-библиотека для нейронных сетей, которая позволяет создавать, обучать и использовать модели для различных задач, включая классификацию, регрессию и прогнозирование временных рядов. Для задач регрессии ключевой особенностью является способность сети предсказывать числовые значения на основе входных данных.
Регрессионные модели в Brain.js чаще всего строятся с использованием Feedforward Neural Network (прямого распространения) или Recurrent Neural Network (RNN) в зависимости от характера данных. Прямое распространение применяется для статических наборов данных, а RNN подходит для последовательностей и временных рядов.
Для начала необходимо подключить Brain.js:
const brain = require('brain.js');
Основной класс для регрессионной задачи — NeuralNetwork:
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 10], // два скрытых слоя по 10 нейронов
activation: 'relu' // функция активации ReLU подходит для регрессии
});
'relu' или 'sigmoid'.Данные должны быть представлены в формате объектов с полями
input и output, где input —
входные значения, а output — целевое числовое значение.
Brain.js работает с числами в диапазоне [0, 1], поэтому
нормализация данных является критически важной:
const trainingData = [
{ input: { x: 0 }, output: { y: 0 } },
{ input: { x: 0.5 }, output: { y: 0.25 } },
{ input: { x: 1 }, output: { y: 1 } }
];
Если целевое значение выходит за пределы [0, 1],
необходимо масштабировать его с использованием нормализации:
function normalize(value, min, max) {
return (value - min) / (max - min);
}
function denormalize(value, min, max) {
return value * (max - min) + min;
}
Обучение производится методом backpropagation. Важные параметры:
iterations — максимальное число итераций обучения.learningRate — скорость обучения.errorThresh — порог ошибки для остановки обучения.Пример обучения:
net.train(trainingData, {
iterations: 20000,
learningRate: 0.01,
errorThresh: 0.0005
});
Чем больше итераций и меньше порог ошибки, тем точнее модель, но выше риск переобучения. Для регрессии важно контролировать масштаб данных и использовать подходящие функции активации.
После обучения сеть способна делать предсказания:
const output = net.run({ x: 0.75 });
console.log(output); // значение между 0 и 1
Если данные были нормализованы, результат следует обратно денормализовать:
const yPredicted = denormalize(output.y, 0, 1);
console.log(yPredicted); // восстановленное числовое значение
Для многомерной регрессии input может содержать
несколько признаков:
const trainingDataMulti = [
{ input: { a: 0, b: 0 }, output: { y: 0 } },
{ input: { a: 0, b: 1 }, output: { y: 1 } },
{ input: { a: 1, b: 0 }, output: { y: 1 } },
{ input: { a: 1, b: 1 }, output: { y: 2 } }
];
const netMulti = new brain.NeuralNetwork({ hiddenLayers: [15, 15], activation: 'relu' });
netMulti.train(trainingDataMulti, { iterations: 20000, learningRate: 0.01, errorThresh: 0.0005 });
const result = netMulti.run({ a: 0.5, b: 0.5 });
console.log(result);
Сеть может выявлять зависимости между несколькими входными параметрами и предсказывать результат на их основе.
RNN особенно эффективны при работе с последовательными данными,
например, прогнозированием температуры или курса акций. В Brain.js
используется класс recurrent.LSTM:
const netRNN = new brain.recurrent.LSTMTimeStep({
inputSize: 1,
hiddenLayers: [10, 10],
outputSize: 1
});
const trainingDataRNN = [
[0, 0.1, 0.2, 0.3],
[0.1, 0.2, 0.3, 0.4]
];
netRNN.train(trainingDataRNN, {
iterations: 15000,
learningRate: 0.01
});
const predicted = netRNN.run([0.3, 0.4, 0.5]);
console.log(predicted); // прогноз следующего значения ряда
LSTM позволяет сети учитывать предыдущие значения и выявлять сложные временные зависимости, что делает её мощным инструментом для регрессии на временных рядах.
Эти принципы и практические примеры позволяют строить точные регрессионные модели с использованием Brain.js для широкого спектра задач, от простых функций до сложных временных рядов.