НАУКА ДАННЫХ

Инструменты для устранения дисбаланса классов

На вашем ремне должны быть инструменты

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

Существует множество методов для устранения дисбаланса классов, таких как обучение с учетом затрат, методы выборки и SMOTE. Мы увидим некоторые библиотеки Python, которые помогут нам решить эту проблему, используя эти методы, которые сэкономят наше время и улучшат результаты.

Imb-learn:

Несбалансированное обучение - это часть проекта scikit-learn-contrib. Этот пакет помогает нам справиться с проблемой дисбаланса классов с помощью методов повторной выборки, таких как

  • Недостаточная выборка класса большинства
  • Избыточная выборка класса меньшинства
  • Комбинирование методов избыточной и недостаточной выборки
  • Создание ансамбля сбалансированных наборов данных

использование

Давайте посмотрим, как применить метод недостаточной выборки из несбалансированного обучения

Сначала мы импортируем необходимые библиотеки и требуемый набор данных, затем разделяем их на обучающие и тестовые наборы, для этого примера мы собираемся использовать набор данных из 20 групп новостей.

Теперь мы подбираем наивный байесовский классификатор и сообщаем результаты. Как вы видите, средний балл f1 макроса метрики (который используется для несбалансированных наборов данных) составляет 79%.

Мы изменили существующий код, добавив RandomUnderSampler из несбалансированного обучения и приспособив его к наивному байесовскому классификатору. Как вы можете видеть, мы увеличили показатель f1 с 79% до 85%.

RandomUnderSampler занижает выборку большинства классов, случайным образом выбирая выборки с заменой или без нее [1]. Таким образом, классы большинства и меньшинства станут в равной пропорции, что поможет улучшить показатель.

SMOTE-Варианты:

SMOTE (сокращение от Synthetic Minority Oversampling Technique) - широко используемый метод передискретизации для решения проблемы дисбаланса классов. справиться с дисбалансом классов в невидимых наборах данных.

Хотя в пакете imbalanced-learn реализована техника SMOTE, пакет smote-options предлагает другие варианты методов сглаживания, которые помогают в реализации, также авторы опубликовали статью [2], в которой излагаются все сравнения и оценки методов SMOTE на несбалансированные наборы данных

Использование:

Пакет smote-options можно использовать по-разному для решения проблемы дисбаланса классов, мы будем использовать несбалансированный набор данных iris0 из несбалансированных баз данных библиотеки, которые имеют большое количество несбалансированных наборов данных.

Это набор данных двоичной классификации, на изображении ниже показана диаграмма разброса классов. На изображении мы можем заметить дисбаланс между двумя классами.

Теперь мы можем передискретизировать этот набор данных, используя метод сглаживания из пакета smote_variant.

На рисунке ниже показаны новые сэмплы меньшинства, созданные с помощью техники SMOTE.

Теперь мы можем использовать этот набор данных с передискретизацией для обучения модели. Загляните в репозиторий, чтобы увидеть больше примеров.

Регрессия-повторная выборка:

Возникает ли проблема дисбаланса классов и в задачах регрессии !?

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

Чтобы предотвратить это, вы можете использовать этот пакет и пересчитать свой набор данных с помощью пакета Imbalanced Learn.

Использование:

Использовать этот пакет довольно просто и понятно.

  • Импортируйте класс ресамплера из пакета и инициализируйте его.
  • Подгоните ресамплер к целевой переменной, которая создаст целевые классы путем объединения целевой переменной
  • Используйте свой любимый метод передискретизации и повторно выполните выборку набора данных с помощью метода resample из пакета (не забудьте использовать целевые классы вместо целевых)

Дополнительные примеры см. В официальных руководствах [3]

Спасибо за прочтение:

Если вам понравилась эта статья или у вас есть вопросы, не стесняйтесь связаться со мной в LinkedIn

Использованная литература:

[1] Репозиторий Imbalanced-Learn на Github

[2] Эмпирическое сравнение и оценка методов передискретизации меньшинств на большом количестве несбалансированных наборов данных

[3] Репозиторий регрессии-передискретизации на Github