В мире машинного обучения достижение сбалансированного представления классов во время обучения имеет решающее значение для построения точных и надежных моделей. Дисбаланс классов возникает, когда количество образцов в каждом классе значительно различается, что приводит к предвзятому обучению и плохой производительности. В этой статье мы рассмотрим различные методы и приемы в Keras, позволяющие устранить дисбаланс классов и обеспечить равное представительство классов во время обучения. Итак, приступим!
- Предварительная обработка данных.
Первым шагом в устранении дисбаланса классов является правильная предварительная обработка данных. Он включает в себя изучение набора данных и понимание распределения классов. Некоторые распространенные методы включают в себя:
-
Стратифицированное разделение. При разделении данных на обучающий и проверочный наборы используйте стратифицированную выборку, чтобы каждый класс был представлен пропорционально в обоих наборах.
-
Визуализация распределения классов. Построение гистограммы или гистограммы для визуализации распределения классов может дать представление о серьезности дисбаланса.
- Увеличение данных.
Увеличение данных — это мощный метод искусственного увеличения количества выборок в классе меньшинства. Он предполагает создание новых синтетических выборок путем применения различных преобразований к существующим данным. Keras предоставляет удобные инструменты для увеличения данных, такие как:
from keras.preprocessing.image import ImageDataGenerator
datagen = ImageDataGenerator(
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode='nearest'
)
- Переборка.
Переборка предполагает увеличение количества выборок в классе меньшинства, чтобы оно соответствовало классу большинства. Вот несколько методов передискретизации, обычно используемых в Keras:
-
Случайная передискретизация: случайным образом дублируются образцы из класса меньшинства, чтобы сбалансировать распределение классов.
-
SMOTE (метод синтетической избыточной выборки меньшинства): генерация синтетических выборок путем интерполяции признаков из k-ближайших соседей каждой выборки класса меньшинства. Этот метод помогает создавать разнообразные и реалистичные синтетические сэмплы.
- Заниженная выборка.
Заниженная выборка направлена на уменьшение количества выборок в классе большинства, чтобы соответствовать классу меньшинства. Некоторые популярные методы недостаточной выборки включают в себя:
-
Случайная недостаточная выборка: произвольное удаление образцов из класса большинства до тех пор, пока не будет достигнут желаемый баланс.
-
NearMiss: выберите образцы из класса большинства, которые имеют наименьшее среднее расстояние до ближайших образцов в классе меньшинства.
- Весовые коэффициенты классов.
Keras позволяет назначать разные веса каждому классу во время обучения, чтобы придать большее значение классу меньшинства. Этого можно добиться, установив параметрclass_weightв процессе подбора модели. Вот пример:
class_weights = {0: 1.0, 1: 5.0} # Adjust the weights according to the class imbalance
model.fit(X_train, y_train, class_weight=class_weights)
- Фокальная потеря:
Фокальная потеря — это модификация функции перекрестной энтропийной потери, предназначенная для устранения классового дисбаланса. Он присваивает более высокие веса неправильно классифицированным образцам из класса меньшинства, тем самым уделяя больше внимания изучению сложных примеров. Keras предоставляет способ реализовать потерю фокуса с помощью пользовательской функции потери.
import tensorflow as tf
def focal_loss(gamma=2.0, alpha=0.25):
def loss(y_true, y_pred):
pt = tf.where(tf.equal(y_true, 1), y_pred, 1 - y_pred)
return -tf.reduce_sum(alpha * tf.pow(1.0 - pt, gamma) * tf.log(pt))
return loss
model.compile(loss=[focal_loss()], optimizer='adam')
Достижение сбалансированного представительства классов во время обучения имеет важное значение для создания эффективных моделей машинного обучения. В этой статье мы исследовали несколько методов и приемов в Keras для устранения дисбаланса классов, включая предварительную обработку данных, увеличение данных, передискретизацию, недостаточную дискретизацию, веса классов и потерю фокуса. Правильно применяя эти методы, вы можете повысить производительность и надежность своих моделей в реальных сценариях.