Оценка качества обученной модели

Оценка качества модели — ключевой этап работы с любыми машинными обучающимися системами, включая ml5.js. Без корректной оценки невозможно понять, насколько модель способна правильно предсказывать новые данные и как она ведёт себя на практике. Ml5.js предоставляет упрощённый доступ к мощным инструментам оценки, делая их понятными в контексте веб-разработки и JavaScript.


Метрики качества

Точность (Accuracy) — одна из наиболее часто используемых метрик для классификационных моделей. Она показывает долю правильных предсказаний относительно общего числа примеров:

[ = ]

В ml5.js точность обычно вычисляется после разбиения данных на тренировочный и тестовый наборы.

Потери (Loss) отражают разницу между предсказанными и реальными значениями. Потери могут быть вычислены по разным функциям, в зависимости от задачи:

  • Для классификации: categoricalCrossentropy
  • Для регрессии: meanSquaredError

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

Матрица ошибок (Confusion Matrix) позволяет визуализировать качество классификации по каждому классу. Она показывает, какие классы модель путает чаще всего. В ml5.js можно получить предсказания по тестовому набору и самостоятельно построить матрицу через JavaScript.


Разделение данных на тренировочные и тестовые

Правильное разделение данных критически важно для честной оценки модели. Стандартное разбиение:

  • Training set (тренировочный набор): 70–80% данных
  • Test set (тестовый набор): 20–30% данных

В ml5.js при использовании ml5.neuralNetwork() можно перед обучением вызвать методы:

nn.addData(inputs, outputs);
nn.normalizeData();
nn.train({epochs: 50});

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

nn.classify(testInput, (err, results) => {
  console.log(results);
});

Это позволяет убедиться, что модель не просто запомнила тренировочные примеры, а умеет обобщать знания.


Кросс-валидация

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

const folds = 5;
for (let i = 0; i < folds; i++) {
  // Выбор тестового и тренировочного фрагментов
  // Обучение модели
  // Проверка точности на тестовом фрагменте
}

Результаты каждой итерации усредняются, что даёт более надёжную оценку производительности модели.


Проверка на переобучение (Overfitting)

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

  • Потери на тренировочном наборе продолжают снижаться, а на тестовом начинают расти.
  • Точность на тестовом наборе значительно ниже, чем на тренировочном.

В ml5.js для отслеживания переобучения удобно использовать callback в методе train():

nn.train({epochs: 100}, whileTraining, finishedTraining);

function whileTraining(epoch, loss) {
  console.log(`Epoch: ${epoch}, Loss: ${loss}`);
}

Если наблюдается резкий разрыв между тренировочными и тестовыми показателями, требуется корректировка архитектуры модели или увеличение объёма данных.


Визуализация результатов

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

  • Графики точности и потерь по эпохам
  • Матрица ошибок в виде цветной таблицы
  • Сравнение предсказанных и реальных значений для регрессии
results.forEach((result, index) => {
  console.log(`Input: ${testInputs[index]}, Prediction: ${result.label}, Actual: ${testOutputs[index]}`);
});

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


Регуляризация и настройка гиперпараметров

Для улучшения качества модели применяют методы регуляризации:

  • Dropout — случайное исключение нейронов на тренировке
  • Weight decay — штраф за большие веса

В ml5.js эти параметры задаются при создании нейронной сети:

const nnOptions = {
  task: 'classification',
  debug: true,
  layers: [
    { type: 'dense', units: 32, activation: 'relu' },
    { type: 'dense', units: 16, activation: 'relu' },
  ],
  learningRate: 0.01
};
const nn = ml5.neuralNetwork(nnOptions);

Изменение learningRate, числа слоёв, числа нейронов и функции активации существенно влияет на способность модели обобщать знания.


Итоговый контроль качества

Сочетание всех методов — правильного разбиения данных, метрик точности и потерь, кросс-валидации, отслеживания переобучения и визуализации — позволяет получить полное понимание того, насколько модель ml5.js готова к практическому применению. Только комплексная оценка даёт уверенность в стабильной работе модели на реальных данных.