Балансировка классов является критически важным этапом подготовки
данных для обучения моделей машинного обучения. В контексте библиотеки
ml5.js это особенно актуально при использовании
классификаторов, таких как ImageClassifier или
KNNClassifier, где дисбаланс может существенно влиять на
точность предсказаний.
Несбалансированные классы возникают, когда количество примеров одной категории значительно превышает количество примеров другой. Например, если для классификации изображений животных имеются 500 изображений кошек и только 50 изображений собак, модель будет склонна отдавать предпочтение кошкам.
Последствия несбалансированного датасета:
Увеличение данных (Data Augmentation)
Этот метод особенно полезен для работы с изображениями. В ml5.js
можно комбинировать увеличение данных на этапе подготовки изображений до
их передачи в ImageClassifier. Ключевые техники:
Увеличение данных помогает искусственно создать больше примеров для редких классов.
Сэмплирование данных (Resampling)
Пример в ml5.js с KNNClassifier:
const knn = ml5.KNNClassifier();
const features = ...; // вектор признаков для изображений
// Добавление повторяющихся примеров для редкого класса
for (let i = 0; i < 5; i++) {
knn.addExample(features, 'редкий_класс');
}Взвешивание классов (Class Weights)
Некоторые модели поддерживают указание весов для каждого класса, чтобы уменьшить влияние частых классов и усилить влияние редких. В ml5.js прямой поддержки весов нет, но можно реализовать косвенно, повторяя примеры редких классов или создавая искусственные примеры через генеративные методы.
Генеративное расширение (Synthetic Data Generation)
В случае изображений можно использовать генеративные модели
(например, GAN) для создания новых примеров редких классов. В ml5.js
доступен GAN модуль, позволяющий синтезировать изображения.
Это помогает сбалансировать набор данных без прямого копирования
существующих изображений.
Собрать все изображения и классифицировать их по классам.
Определить число примеров каждого класса и выявить дисбаланс.
Для редких классов выполнить:
Для частых классов можно выполнить undersampling, если это не критично для объема данных.
Добавить все примеры в классификатор ml5.js
(ImageClassifier или KNNClassifier).
Проверить результаты на валидационной выборке, анализируя F1-score для каждого класса.
Балансировка классов — неотъемлемая часть подготовки данных для ml5.js. Она позволяет создать устойчивую модель, которая одинаково хорошо распознаёт все категории, а не только наиболее представленные.