Brain.js предоставляет средства для создания нейронных сетей различного типа, включая классические многослойные перцептроны и рекуррентные сети. В задачах, где требуется повысить точность предсказаний или уменьшить влияние случайных ошибок модели, широко используется техника голосования и усреднения предсказаний. Этот подход позволяет объединять результаты нескольких обученных моделей, формируя более стабильный и надежный результат.
Голосование (voting) и усреднение (averaging) — это методы ансамблирования моделей. В контексте Brain.js они применяются следующим образом:
Обучение нескольких моделей Создаются несколько сетей одного типа с одинаковой архитектурой, но с разными начальными весами или различными подвыборками обучающих данных. Каждая модель обучается независимо. Это снижает вероятность того, что случайные особенности данных сильно повлияют на итоговое предсказание.
Получение предсказаний от каждой модели После обучения каждой модели можно получить результат для одного и того же входного набора данных. Например, если сеть классифицирует цифры, каждая модель выдаёт вероятности для каждого класса.
Объединение результатов
const brain = require('brain.js');
// Пример: создание нескольких моделей
const models = [];
const numModels = 5;
for (let i = 0; i < numModels; i++) {
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 10],
activation: 'relu'
});
net.train(trainingData, {
iterations: 2000,
learningRate: 0.01
});
models.push(net);
}
Каждая сеть имеет одинаковую архитектуру, но различие в инициализации весов и случайной последовательности обучения приводит к небольшим различиям в предсказаниях.
Для регрессионных задач или вероятностного вывода используется усреднение:
function averagePredictions(models, input) {
const predictions = models.map(model => model.run(input));
const sum = predictions.reduce((acc, pred) => {
for (let key in pred) {
if (!acc[key]) acc[key] = 0;
acc[key] += pred[key];
}
return acc;
}, {});
const averaged = {};
for (let key in sum) {
averaged[key] = sum[key] / models.length;
}
return averaged;
}
// Использование
const result = averagePredictions(models, testInput);
console.log(result);
В этом примере каждое значение вероятности по классам суммируется и делится на количество моделей, формируя итоговое предсказание.
Для задач классификации можно использовать метод большинства голосов:
function majorityVote(models, input) {
const votes = models.map(model => {
const output = model.run(input);
return Object.keys(output).reduce((a, b) => output[a] > output[b] ? a : b);
});
const voteCount = votes.reduce((acc, vote) => {
acc[vote] = (acc[vote] || 0) + 1;
return acc;
}, {});
const winner = Object.keys(voteCount).reduce((a, b) => voteCount[a] > voteCount[b] ? a : b);
return winner;
}
// Использование
const predictedClass = majorityVote(models, testInput);
console.log(predictedClass);
Здесь каждая модель выбирает класс с наибольшей вероятностью, а итоговый результат определяется классом с максимальным числом голосов.
Эта методика позволяет использовать Brain.js не только для одиночных сетей, но и для построения надежных ансамблей, способных работать с нестабильными или шумными данными, повышая точность предсказаний и устойчивость к ошибкам.