Какие знаешь алгоритмы размножения редких данных?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Алгоритмы синтеза данных для редких классов
Синтез редких данных — это техника для решения дисбаланса класса. Вместо дублирования или удаления, синтетические методы создают новые реалистичные примеры редкого класса.
1. SMOTE (Synthetic Minority Over-sampling Technique)
Один из самых популярных методов. Создаёт синтетические примеры редкого класса в пространстве между существующими примерами.
Алгоритм:
- Выбрать случайный пример редкого класса
- Найти k ближайших соседей того же класса
- Выбрать одного соседа случайно
- Синтезировать новый пример: x_new = x_i + random(0,1) * (x_NN - x_i)
Результат: новая точка на линии между двумя примерами, что создаёт реалистичные данные без дублирования.
2. ADASYN (Adaptive Synthetic Sampling)
Улучшенная версия SMOTE. Адаптивно генерирует больше примеров в сложных регионах пространства, где соседи разных классов близко.
Oтличие: SMOTE генерирует равномерно, ADASYN генерирует больше в пограничных регионах, где модель делает ошибки.
3. BorderlineSMOTE
Генерирует примеры только на границе между классами. BorderlineSMOTE-1 консервативный, BorderlineSMOTE-2 агрессивный.
4. SVM SMOTE
Использует SVM для определения опорных векторов редкого класса и синтезирует примеры вокруг них. Учитывает границу, найденную SVM.
5. Gaussian Mixture Model (GMM)
Обучить ГММ на редком классе, затем генерировать новые примеры из модели. Хорошо для данных с гауссовым распределением.
6. GAN (Generative Adversarial Network)
Использовать нейронные сети. Generator создаёт синтетические примеры, Discriminator различает реальные vs синтетические. Самый мощный метод для сложных данных (изображения, текст).
7. Комбинированные методы
Сочетание SMOTE (для синтеза редкого) + RandomUnderSampling (для уменьшения большого класса). Часто даёт лучшие результаты.
Сравнение методов
SMOTE: быстрый, хорошее качество, используется в 90% случаев (default) ADASYN: немного лучше, адаптивный BorderlineSMOTE: фокусируется на границе SVM SMOTE: медленнее, лучше качество GMM: быстро, для гауссовых данных GAN: медленно, лучшее качество для сложных данных
Практическое применение
from imblearn.over_sampling import SMOTE
smote = SMOTE(random_state=42)
X_balanced, y_balanced = smote.fit_resample(X_train, y_train)
Это создаст сбалансированный набор данных, где редкого класса столько же, сколько большого.
На практике я начинаю с SMOTE (простой и эффективный), проверяю результаты, потом пробую ADASYN если нужны улучшения.