TGViewer
Machine learning Interview Machine learning Interview @machinelearning_interview · 30.4K subscribers
Post #485 3.82K
📌 Расскажите про методы балансировки классов. Часть 1.

Взвешивание классов (Class Weighting)
Одним из первых методов, которые стоит рассмотреть, является взвешивание классов, или Class Weighting. Этот метод позволяет учесть дисбаланс между классами в процессе обучения модели. Он основан на идее того, что модель будет штрафовать более сильно за ошибки в классе-меньшинстве, поощряя более точное предсказание.

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

Пример 1: Взвешивание классов в библиотеке Scikit-learn (Python)

from sklearn.ensemble import RandomForestClassifier
from sklearn.utils.class_weight import compute_class_weight

# Получение весов классов
class_weights = compute_class_weight('balanced', classes=np.unique(y), y=y)

# Создание модели с взвешиванием классов
model = RandomForestClassifier(class_weight=dict(enumerate(class_weights)))

В приведенном коде мы используем библиотеку Scikit-learn для вычисления весов классов с помощью compute_class_weight. Параметр 'balanced' автоматически вычисляет веса классов на основе их доли в данных. Затем мы передаем эти веса в нашу модель случайного леса, что позволяет учесть дисбаланс классов.

Пример 2: Взвешивание классов в TensorFlow (Python)

import tensorflow as tf

# Создание модели
model = tf.keras.Sequential([
# добавьте слои вашей модели
])

# Определение весов классов
class_weights = {
0: 1.0, # Вес для класса 0
1: 10.0, # Вес для класса 1 (пример взвешивания, где класс-меньшинство получает более высокий вес)
}

# Компиляция модели с учетом весов классов
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'],
class_weight=class_weights)

В данном примере мы создаем нейронную сеть с использованием TensorFlow и задаем веса классов вручную с помощью словаря class_weights. Здесь класс-меньшинство (класс 1) получает более высокий вес (10.0), что отражает нашу попытку сбалансировать дисбаланс данных.

Увеличение (Oversampling) и уменьшение (Undersampling) выборки
Одним из основных способов борьбы с несбалансированными данными является увеличение (oversampling) и уменьшение (undersampling) выборки. Эти методы направлены на достижение баланса между классами путем изменения количества примеров в каждом классе.

Увеличение выборки (Oversampling)
Увеличение выборки заключается в добавлении дополнительных примеров класса-меньшинства, чтобы сделать его более представительным. Это можно сделать различными способами, например, путем дублирования существующих примеров, генерации синтетических данных или комбинирования этих методов.

Пример 1: Увеличение выборки с использованием библиотеки imbalanced-learn (Python)

from imblearn.over_sampling import RandomOverSampler

# Создание экземпляра RandomOverSampler
ros = RandomOverSampler()

# Применение увеличения выборки к данным
X_resampled, y_resampled = ros.fit_resample(X, y)

В этом примере мы используем библиотеку imbalanced-learn для увеличения выборки с помощью RandomOverSampler. Этот метод случайным образом выбирает примеры из класса-меньшинства и дублирует их, пока не достигнется баланс.

Уменьшение выборки (Undersampling)
Уменьшение выборки заключается в уменьшении количества примеров в классе-большинстве, чтобы сделать его менее доминирующим. Это может быть полезным, если дублирование примеров класса-меньшинства нежелательно.

Пример : Уменьшение выборки с использованием библиотеки imbalanced-learn (Python)

from imblearn.under_sampling import RandomUnderSampler

# Создание экземпляра RandomUnderSampler
rus = RandomUnderSampler()

# Применение уменьшения выборки к данным
X_resampled, y_resampled = rus.fit_resample(X, y)


Здесь мы используем библиотеку imbalanced-learn для уменьшения выборки с помощью RandomUnderSampler. Этот метод случайным образом удаляет примеры из класса-большинства до достижения баланса.

@machinelearning_interview
  • 👍 16
  • ❤ 4
  • 🔥 2
More from @machinelearning_interview
  1. Oct 17, 2026🔥 Полный гайд по локальному запуску DeepSeek на русском: от домашнего ПК до сервера с 8 G…
  2. Oct 16, 2026🦥 816 млрд параметров на Mac Studio: Unsloth выпустила GGUF для Muse Spark Open Модель по…
  3. Oct 16, 2026🔥 Модель на 125 млрд параметров на игровой видеокарте с 12 ГБ памяти. Strata позволяет за…
  4. Oct 15, 2026🤖 600 млрд параметров и миллион токенов контекста: StepFun открыла веса Step-5-Preview. М…
  5. Oct 15, 2026С вас идея, а Т-Банк за нее заплатит В Т-Банке ищут трейдеров, разработчиков и тех, кто пр…
  6. Oct 15, 2026🧠 BERT жив. UltraBERT показал, что рецепт обучения может быть важнее дополнительных трилл…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →