Привет, ребята !!

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

Хотите узнать больше о несбалансированных наборах данных?

Вы можете проверить ссылку ниже:



Почему точность не является хорошим показателем всех проблем классификации?
Привет, ребята!!medium.com



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

Примечание. В качестве примера для этого блога мы будем использовать набор данных обнаружения мошенничества с кредитными картами с 2 84 807 точками данных (492 – случаи мошенничества и 2 84 315 – реальные случаи). сильный>

Под выборкой

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

Случайная недостаточная выборка:

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

Шаги:

  1. Узнайте индекс мошенничества и подлинных транзакций и сохраните их в двух списках отдельно.
  2. Используя функцию random.sample(), мы случайным образом выбираем некоторые индексы в соответствии с длиной списка Fraction_index.
  3. Объедините оба индекса в один список.
  4. Извлеките точки данных в этих местах с помощью функции .iloc()

random.sample(sequence,k) имеет следующие аргументы:

последовательность. Может быть списком, кортежем, строкой или набором. В нашем случае мы передаем список подлинных индексов, из которых мы хотим выбрать точки данных.
k: целочисленное значение, указывающее длину выборки. Поскольку нам нужен список, равный длине Fraction_index, мы передаем его длину.

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

Итак, давайте поговорим о следующем подходе:

Излишняя выборка

Избыточная выборка — это процесс, при котором мы добавляем больше выборок в класс меньшинства, чтобы сделать набор данных сбалансированным.

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

Какое решение может быть?

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

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

Шаги:

  1. Случайная точка (назовем точку D для справки) выбирается из класса меньшинства.
  2. Затем выбирается k ближайших соседей (обычно k=5) из класса меньшинства.
  3. Один из соседей выбирается случайным образом (скажем, E), а синтетическая точка создается путем выбора случайной точки на линии, соединяющей две выбранные точки (т. е. D и E).
  4. Этот процесс повторяется, пока мы не получим сбалансированный набор данных.

Теперь давайте посмотрим на его реализацию:

Вы, ребята, видите, что применить SMOTE очень просто. Мы можем использовать библиотеку imblearn для применения SMOTE.

Если вы посмотрите на вывод, то увидите, что общее количество точек данных составляет 5 68 630 (изначально было всего 2 84 807).

Давайте посмотрим на распределение по классам:

Смотрите, теперь у нас есть одинаковые точки данных для обоих классов. Ранее было 2 84 315 точек данных для подлинных транзакций, но теперь у нас есть такое же количество точек для мошеннических транзакций.

Поэтому данные теперь сбалансированы.

Вы можете попробовать упомянутые выше методы, если вам нужно сбалансировать набор данных.

Не стесняйтесь комментировать ниже, если у вас есть какие-либо сомнения.

Всего наилучшего и удачного обучения..!!