Введение в метод передискретизации синтетического меньшинства и его реализация с нуля

Подход к построению классификаторов из несбалансированных наборов данных

Несбалансированные наборы данных

Набор данных несбалансирован, если классификационные метки представлены неравномерно, поэтому дисбаланс порядка 100 к 1 является распространенной проблемой в большом количестве реальных сценариев, таких как обнаружение мошенничества. Было предпринято большое количество попыток решить эту проблему. Однако эта проблема до сих пор широко обсуждается и активно исследуется. В этой статье я хотел бы рассказать об одном простом, но интересном подходе, используемом в таких сценариях. Чтобы сделать его интересным, я хотел бы обсудить его возможные приложения и реализацию.

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

В наборе игрушек выше есть 9900 образцов, принадлежащих к классу 0, и только 100 образцов для последнего, что дает соотношение 1:100. Предположим, вы обучаете свою модель, используя приведенный выше набор данных, не принимая во внимание распределение. Самая большая проблема, возникающая при работе с несбалансированными наборами данных, — это смещение модели в сторону доминирующего класса. Таким образом, модели нетрудно присвоить каждому отдельному образцу метку 0 для достижения точности 99%. Однако важно использовать другие показатели, которые могут дать вам больше информации. Если бы нашей задачей была классификация спама, наша модель была бы совершенно бесполезна. Конечно, всегда лучше получить больше данных; однако это может быть очень сложно.

Работа с несбалансированными данными

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

SMOTE: метод передискретизации синтетического меньшинства

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

Как мы видим, идея основана на алгоритме K-ближайших соседей. Если вы не знакомы с этим, я прилагаю свою статью об этом вместе с реализацией Python :). Итак, мы получаем разницу между выборкой и одним из ее k ближайших соседей и умножаем на некоторую случайную величину в диапазоне (0, 1). Наконец, мы создаем новый синтетический образец, добавляя значение, полученное в результате предыдущей операции.

На изображении выше показан наш набор данных после применения SMOTE. Сейчас в каждой категории 9900 образцов.

Почему это имеет смысл для меня

Если у вас есть опыт классификации изображений, увеличение изображения — очень распространенный метод, используемый для получения большего количества обучающих выборок. Однако, если предположить, что модель пытается перевести изображение в какое-то многомерное пространство, предполагается, что дополненная выборка находится где-то рядом с исходной выборкой. Следовательно, в случае SMOTE синтетический образец будет эквивалентен дополненному изображению. Однако нет сомнений в том, что лучше собрать больше данных, поскольку это помогает собрать более широкий спектр представлений о конкретном объекте.

Выполнение

Я прилагаю свою реализацию SMOTE, написанную для Pytorch. Его можно легко перевести для Numpy.

Некоторые приложения

Предположим, вы работаете над рекомендательной системой с использованием вложений и можете получить вложения, связанные с понравившимися вещами человека. Однако данных о конкретном пользователе недостаточно, чтобы генерировать содержательные рекомендации. Таким образом, вы можете использовать существующее встраивание и генерировать синтетическое встраивание, а также рассчитывать более полезные рекомендации. Таким образом, вы можете представить себе использование SMOTE в качестве своего рода увеличения времени тестирования (TTA).

Несколько последних слов

Набор данных несбалансирован, если классификационные метки представлены неравномерно, поэтому дисбаланс порядка 100 к 1 является распространенной проблемой в большом количестве реальных сценариев, таких как обнаружение мошенничества. Было предпринято большое количество попыток решить эту проблему. Однако эта проблема до сих пор широко обсуждается и активно исследуется. Сегодня вы познакомились с простым, но интересным алгоритмом генерации синтетических сэмплов. На самом деле существует множество версий SMOTE. Вы можете проверить еще несколько различных версий алгоритма SMOTE и сравнить их преимущества по сравнению с исходной версией. Вышеприведенную реализацию можно легко найти на моем GitHub.

Бумага

SMOTE: Техника передискретизации синтетического меньшинства

Похожие статьи