Нормализация и денормализация данных

Нормализация данных является критически важным этапом при работе с нейронными сетями в библиотеке Brain.js. Она заключается в преобразовании исходных данных в диапазон, удобный для обработки нейросетью. Brain.js работает с числами в диапазоне от 0 до 1, поэтому значения входных данных необходимо масштабировать соответствующим образом.

Цель нормализации

  1. Стабилизация обучения: нейронные сети лучше обучаются, когда входные значения имеют схожий масштаб.
  2. Ускорение сходимости: большое расхождение числовых значений замедляет обучение, так как градиенты могут становиться слишком малыми или слишком большими.
  3. Предотвращение переобучения: нормализованные данные снижают вероятность того, что сеть будет учитывать масштаб данных вместо их закономерностей.

Методы нормализации

  1. Мин–макс нормализация Преобразует значения из исходного диапазона [min, max] в новый [0, 1]. Формула:

    [ x_{norm} = ]

    Пример на Jav * aScript:

    const min = 10;
    const max = 50;
    const value = 30;
    
    const normalized = (value - min) / (max - min); // 0.5

    Мин–макс нормализация подходит для числовых признаков с известными границами, например, температур или цен.

  2. Нормализация по среднему и стандартному отклонению (z-score) Преобразует значения так, чтобы они имели среднее 0 и стандартное отклонение 1:

    [ x_{norm} = ]

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

Пример подготовки данных для нейросети

const brain = require('brain.js');
const net = new brain.NeuralNetwork();

const rawData = [
  { temp: 15, humidity: 80, outcome: 1 },
  { temp: 30, humidity: 50, outcome: 0 },
];

// Нормализация temp и humidity
const tempMin = 0, tempMax = 40;
const humidityMin = 0, humidityMax = 100;

const trainingData = rawData.map(d => ({
  input: {
    temp: (d.temp - tempMin) / (tempMax - tempMin),
    humidity: (d.humidity - humidityMin) / (humidityMax - humidityMin)
  },
  output: { result: d.outcome }
}));

net.train(trainingData);

Денормализация данных

После того как нейросеть сделала прогноз на нормализованных данных, результат необходимо вернуть в исходный диапазон.

Формула обратной денормализации для мин–макс метода:

[ x_{original} = x_{norm} (x_{max} - x_{min}) + x_{min}]

Пример:

const normalizedPrediction = 0.75;
const originalPrediction = normalizedPrediction * (tempMax - tempMin) + tempMin; // 30

Практические рекомендации

  • Хранение масштабов: всегда сохранять значения min и max или среднее и стандартное отклонение для последующей денормализации.
  • Консистентность данных: один и тот же метод нормализации использовать для всех данных, включая обучающую и тестовую выборки.
  • Обработка категориальных признаков: для категорий лучше применять one-hot кодирование, так как прямое нормализованное число может быть некорректно интерпретировано сетью.
  • Контроль диапазонов после денормализации: иногда предсказания выходят за пределы исходного диапазона, требуется обрезка значений.

Заключение к разделу

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

Нормализованные входные данные и корректная денормализация результатов формируют надежную основу для создания предсказательных моделей на JavaScript.