Подготовка и нормализация входных данных

Основы работы с входными данными

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

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

Работа с числовыми данными

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

  1. Масштабирование к диапазону [0, 1]

    const normalized = data.map(value => (value - minValue) / (maxValue - minValue));

    Такой подход позволяет модели быстрее сходиться и предотвращает доминирование признаков с большим масштабом.

  2. Стандартизация (z-score)

    const mean = data.reduce((a, b) => a + b) / data.length;
    const std = Math.sqrt(data.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / data.length);
    const standardized = data.map(value => (value - mean) / std);

    Стандартизация полезна, когда признаки имеют сильно различающиеся дисперсии.

Обработка изображений

Для работы с изображениями в ml5.js используются объекты p5.Image или HTML-элементы . Перед передачей изображения в модель необходимо:

  • Изменение размера (resize) к стандартным размерам модели (например, 224x224 для MobileNet).

  • Преобразование в числовую матрицу и масштабирование пикселей к диапазону [0, 1] или [-1, 1], в зависимости от требований модели.

    const imgArray = [];
    img.loadPixels();
    for (let i = 0; i < img.pixels.length; i += 4) {
        imgArray.push(img.pixels[i] / 255); // красный канал
        imgArray.push(img.pixels[i + 1] / 255); // зелёный
        imgArray.push(img.pixels[i + 2] / 255); // синий
    }
  • Центрирование данных: для некоторых моделей полезно вычитать среднее значение пикселя, чтобы значения распределялись вокруг нуля.

Обработка текстовых данных

Текстовые данные требуют преобразования в числовые представления:

  • Токенизация — разбиение текста на отдельные слова или символы.

  • Построение словаря — каждому слову присваивается уникальный индекс.

  • Преобразование текста в последовательность индексов:

    const textSequence = tokens.map(token => vocabulary[token] || 0);
  • Паддинг последовательностей для выравнивания длины входных данных:

    while(sequence.length < maxLength) {
        sequence.push(0);
    }

Обработка аудиоданных

Аудиосигналы требуют особой подготовки:

  • Выбор частоты дискретизации — унификация всех аудиофайлов к одной частоте.

  • Нормализация амплитуды:

    const normalizedAudio = audioData.map(sample => sample / 32768);
  • Преобразование в спектрограммы для последующей подачи в нейронные сети. Это позволяет моделям эффективно извлекать частотные признаки.

Совместимость данных с ml5.js

Модели ml5.js ожидают входные данные в определённой форме:

  • Классификация изображений: p5.Image, или Canvas.
  • Регрессия и классификация числовых данных: массивы чисел (Array) или тензоры TensorFlow.js (tf.tensor).
  • Обработка текста: массив индексов слов или one-hot кодирование.

Использование tf.tensor позволяет применять встроенные методы нормализации и пакетную обработку, что повышает производительность при работе с большими объёмами данных.

Пакетная обработка данных

Для ускорения обучения рекомендуется группировать данные в батчи:

const batchSize = 32;
for(let i = 0; i < dataset.length; i += batchSize) {
    const batch = dataset.slice(i, i + batchSize);
    // дальнейшая обработка батча
}

Пакетная обработка снижает колебания градиентов и позволяет использовать GPU через TensorFlow.js для вычислений.

Проверка качества и полноты данных

Перед обучением необходимо убедиться в:

  • Отсутствии пропущенных значений
  • Однородности размерностей и типов данных
  • Сбалансированности классов для задач классификации

Эти проверки предотвращают ошибки на этапе обучения и повышают точность модели.