SMOTE

В этой статье описывается, как использовать компонент SMOTE в конструкторе Машинного обучения Azure, чтобы увеличить количество недостаточно представленных случаев в наборе данных, который используется для машинного обучения. SMOTE — лучший способ увеличить количество редких случаев, чем простое дублирование существующих случаев.

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

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

Подробнее о SMOTE

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

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

SMOTE принимает на вход весь набор данных, но увеличивает процент только незначительных наблюдений. Например, предположим, что у вас есть несбалансированный набор данных, в котором только 1 процент случаев имеет целевое значение A (класс меньшинства), а 99 процентов случаев имеют значение B. Чтобы увеличить процент случаев меньшинств в два раза по сравнению с предыдущим процентом, вы должны ввести 200 для процента SMOTE в свойствах компонента.

Примеры

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

Если вы добавите набор данных в конвейер и выберете Визуализировать на выходе набора данных, вы увидите, что из 748 строк или наблюдений в наборе данных 570 наблюдений (76 процентов) относятся к классу 0, а 178 случаев (24 процента) — к классу 1. Хотя этот результат не сильно несбалансированный, класс 1 представляет людей, которые сдали кровь, поэтому эти строки содержат пространство функций, которое вы хотите смоделировать.

Чтобы увеличить количество наблюдений, вы можете установить значение процента SMOTE, используя кратные 100, как показано ниже:

Класс 0 Класс 1 total
Исходный набор данных

(эквивалент SMOTE в процентах = 0)
570

76%
178

24 %
748
процент SMOTE = 100 570

62 %
356

38 %
926
процент SMOTE = 200 570

52%
534

48 %
1104
процент SMOTE = 300 570

44 %
712

56 %
1,282

Предупреждение

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

Как настроить SMOTE

  1. Добавьте компонент SMOTE в свой конвейер. Вы можете найти компонент в разделе Компоненты преобразования данных в категории Манипуляции.

  2. Подключите набор данных, который вы хотите улучшить. Если вы хотите указать пространство функций для создания новых наблюдений, применяя только определенные столбцы или исключив некоторые из них, используйте компонент Выбрать столбцы в наборе данных. Затем вы можете изолировать столбцы, которые хотите использовать, перед применением SMOTE.

    В противном случае создание новых обращений с помощью SMOTE будет основано на всех столбцах, которые вы указываете в качестве входных данных. По крайней мере, один столбец столбцов функций является числовым.

  3. Убедитесь, что выбран столбец, содержащий метку или целевой класс. SMOTE принимает только двоичные метки.

  4. Компонент SMOTE автоматически определяет класс меньшинства в столбце метки, а затем получает все примеры для класса меньшинства. Все столбцы не могут иметь значения NaN.

  5. В параметре процент SMOTE введите целое число, которое указывает целевой процент случаев меньшинства в выходном наборе данных. Пример:

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

    • Вы вводите 100. Компонент SMOTE генерирует новые дела меньшинств. Это добавляет такое же количество случаев меньшинства, которое было в исходном наборе данных. Поскольку SMOTE не увеличивает количество дел большинства, доля дел каждого класса изменилась.

    • Вы вводите 200. Компонент удваивает процент случаев меньшинств по сравнению с исходным набором данных. Это не приводит к тому, что количество дел меньшинств в два раза больше, чем раньше. Скорее, размер набора данных увеличивается таким образом, чтобы количество случаев в большинстве случаев оставалось прежним. Количество случаев меньшинства увеличивается до тех пор, пока оно не будет соответствовать желаемому процентному значению.

    Примечание

    Используйте только кратные 100 для процента SMOTE.

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

    • Увеличивая количество ближайших соседей, вы получаете возможности из большего числа дел.
    • Сохраняя небольшое количество ближайших соседей, вы используете функции, которые больше похожи на те, что в исходной выборке.
  7. Введите значение в поле Случайное начальное значение, если вы хотите обеспечить одинаковые результаты при прогонах одного и того же конвейера с одинаковыми данными. В противном случае компонент генерирует случайное начальное число на основе значений тактовой частоты процессора при развертывании конвейера. Создание случайного начального числа может привести к немного другим результатам при прогоне.

  8. Отправьте конвейер.

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

Технические примечания

  • Когда вы публикуете модель, в которой используется компонент SMOTE, удалите SMOTE из конвейера прогнозирования, прежде чем он будет опубликован как веб-служба. Причина в том, что SMOTE предназначен для улучшения модели во время обучения, а не для оценки. Вы можете получить сообщение об ошибке, если опубликованный прогнозный конвейер содержит компонент SMOTE.

  • Часто можно получить лучшие результаты, если очистить отсутствующие значения или применить другие преобразования для исправления данных перед применением SMOTE.

  • Некоторые исследователи изучили, эффективен ли SMOTE для многомерных или разреженных данных, таких как данные, используемые в классификации текста или наборах данных геномики. В этой статье содержится хорошее резюме эффектов и теоретической обоснованности применения SMOTE в таких случаях: Blagus и Lusa: SMOTE для многомерных данных с несбалансированными классами.

  • Если SMOTE неэффективен в вашем наборе данных, вы можете рассмотреть другие подходы, включая:

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

Дальнейшие действия

Ознакомьтесь с набором доступных компонентов для Машинного обучения Azure.