Неравенство классов и увеличение выборки Формальное введение

Неравенство классов и расширение выборки формальное представление

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

В последнее время я работал над пакетом для решения проблемы несбалансированности классов в Julia под названием Imbalance.jl. Мне потребовалось много усилий в виде чтения научных статей и изучения реализаций при создании этого пакета, поэтому я решил поделиться тем, что узнал о проблеме несбалансированности классов в целом, а также о некоторых самых популярных алгоритмах, используемых для ее решения. Среди них Наивное случайное увеличение, Наивное случайное увеличение на примерах (ROSE), случайное увеличение методом случайного блуждания (RWO), Синтетическая минорная техника увеличения (SMOTE), SMOTE-Nominal и SMOTE-Nominal Continuous, а также множество подходов к уменьшению выборки. В этой статье мы формально определим проблему несбалансированности классов и обсудим, почему случайное увеличение является допустимым решением. В следующих статьях мы рассмотрим более рациональные способы решения этой проблемы, рассмотрев другие техники.

Фото Артема Князя на Unsplash

Проблема несбалансированности классов

Большинство, если не все, алгоритмы машинного обучения могут быть рассмотрены как форма минимизации эмпирического риска, где задача состоит в поиске параметров θ, которые для некоторой функции потерь L минимизируют:

Например, линейная регрессия использует квадратичную потерю, логистическая регрессия – потерю перекрестной энтропии, SVM – функцию потерь петли, а адаптивное увеличение – экспоненциальную потерю.

Основное предположение состоит в том, что если параметры f_θ позволяют ему минимизировать этот эмпирический риск по набору данных, которые могут быть рассмотрены как случайная выборка из генеральной совокупности, то он должен быть достаточно близким к целевой функции f, которую мы ищем, чтобы модель, которая минимизирует то же самое количество по набору данных и, более того, по всей совокупности данных.

В случае мультиклассовой задачи с K классами мы можем записать эмпирический риск следующим образом:

Проблема несбалансированности классов возникает, когда некоторые классы имеют гораздо меньше примеров, чем другие классы. В этом случае термины, соответствующие таким классам, минимально вносят вклад в сумму, что позволяет любому алгоритму машинного обучения найти приближенное решение задачи минимизации эмпирического риска, которое в основном минимизирует его по значимым суммам. Это приводит к гипотезе f_θ, которая может сильно отличаться от истинной целевой функции f по отношению к меньшинству классов, которые могут быть наиболее важными для предметной области.

В заключение, следующие условия свидетельствуют о проблеме несбалансированности классов:

1 – Точки в обучающем наборе не распределены “справедливо” среди классов; некоторым классам принадлежит намного меньше точек, чем другим.

2 – Модель плохо справляется с точками, принадлежащими таким меньшинственным классам после обучения. Другими словами, алгоритм машинного обучения не минимизировал потерю правильно для меньшинственных классов, как объяснялось выше.

Степень того, насколько эта проблема является неблагоприятной, зависит от того, насколько важны такие меньшинственные классы для задачи. Они часто более важны, чем класс большинства (например, классификация мошеннических транзакций или редких заболеваний).

Решение проблемы несбалансированности классов

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

Другой подход, который пытается решить проблему без необходимости внесения изменений в алгоритм машинного обучения, – это ресемплинг данных. В наиболее простой форме его можно рассматривать как эквивалент метода с использованием взвешивания в соответствии с затратами. Рассмотрим следующий алгоритм:

Известно: Несбалансированный набор данных с K классами и целым числом для каждого классаТребуется: Набор данных, в котором данные из каждого класса повторяются в соответствии с целым числомОперация: Повторить каждую точку в классе k c раз, где c – это связанное число с этим классом

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

Случайное увеличение выборки

Упомянутый алгоритм имеет небольшую проблему; если у класса A есть 900 примеров, а у класса B – 600 примеров, то нет целого множителя, который мы могли бы использовать для увеличения выборки класса B для достижения точного баланса набора данных. Мы можем расширить алгоритм для работы с коэффициентами увеличения выборки, которые не являются целыми числами, путем случайного выбора точек для повторения. Например, если мы хотим увеличить выборку на 300 примеров для класса B, чтобы система была сбалансированной (эквивалентно коэффициенту 1,5), это можно сделать следующим образом…

1 — Случайный выбор 300 точек из класса B2 — Повторение этих точек

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

1 — Вычислить необходимое количество точек для каждого класса (вычисляется из заданных соотношений)2 — Предположим, что для класса k это число равно N_k, затем случайным образом выберите N_k точек с повторением из точек, принадлежащих этому классу, и добавьте их в новый набор данных

Очевидно, что это в среднем эквивалентно упомянутому алгоритму и, следовательно, взвешиванию классов. Если коэффициент для класса k равен 2.0, то в среднем каждая точка будет случайно выбрана один раз.

Вот случайный несбалансированный набор данных, который я создал для трех классов (0, 1, 2), в котором показаны гистограмма классов и точечная диаграмма точек до и после увеличения выборки.

Изображение от автора

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

Почему увеличение выборки?

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

Логично, что мы будем достигать лучших результатов, чем при наивном случайном увеличении выборки (или взвешивании классов), если вместо этого естественным образом добавим точки для каждого класса, собирая больше данных в нашем наборе данных. Например, предположим, что…

  • Мы хотим определить, является ли транзакция мошеннической
  • Мы собрали набор данных из 1K мошеннических транзакций и 999K действительных транзакций

Очевидно, что решение проблемы несбалансированности путем сбора еще 998K мошеннических транзакций гораздо лучше, чем повторение существующих 1K транзакций 997K раз. В частности, мы рискуем переобучением на конкретные данные, наблюдаемые в последнем случае.

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

Прореживание выборки

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

В дальнейших историях мы объясняем все алгоритмы, изначально реализованные в Imbalance.jl и как они решают проблему несбалансированности классов.