Привет, ребята !!
Во время нашего путешествия по машинному обучению мы все сталкивались с множеством наборов данных. Возможно, вы даже сталкивались с несбалансированными наборами данных.
Хотите узнать больше о несбалансированных наборах данных?
Вы можете проверить ссылку ниже:
Существуют разные подходы к обработке несбалансированных наборов данных. Начнем с очень простого подхода.
Примечание. В качестве примера для этого блога мы будем использовать набор данных обнаружения мошенничества с кредитными картами с 2 84 807 точками данных (492 – случаи мошенничества и 2 84 315 – реальные случаи). сильный>
Под выборкой
Это процесс балансировки набора данных путем уменьшения количества точек данных в классе большинства, чтобы сделать его равным количеству точек данных в классе меньшинства. Недостаточная выборка может быть выполнена с использованием различных методик. Здесь мы собираемся обсудить один из самых простых методов, который называется Случайная недостаточная выборка.
Случайная недостаточная выборка:
При случайной недостаточной выборке точки данных случайным образом исключаются из класса большинства, чтобы сбалансировать набор данных.
Шаги:
- Узнайте индекс мошенничества и подлинных транзакций и сохраните их в двух списках отдельно.
- Используя функцию random.sample(), мы случайным образом выбираем некоторые индексы в соответствии с длиной списка Fraction_index.
- Объедините оба индекса в один список.
- Извлеките точки данных в этих местах с помощью функции .iloc()
random.sample(sequence,k) имеет следующие аргументы:
последовательность. Может быть списком, кортежем, строкой или набором. В нашем случае мы передаем список подлинных индексов, из которых мы хотим выбрать точки данных.
k: целочисленное значение, указывающее длину выборки. Поскольку нам нужен список, равный длине Fraction_index, мы передаем его длину.
Однако проблема с этим подходом заключается в том, что мы случайным образом пропускаем множество точек данных, которые могли бы способствовать обучению моей модели.
Итак, давайте поговорим о следующем подходе:
Излишняя выборка
Избыточная выборка — это процесс, при котором мы добавляем больше выборок в класс меньшинства, чтобы сделать набор данных сбалансированным.
Мы можем выполнить случайную выборку, когда точки данных случайным образом реплицируются из класса меньшинства, чтобы количество точек данных в классе меньшинства и большинства было равным. Однако это может привести к переоснащению, поскольку мы реплицируем точки данных из класса меньшинства.
Какое решение может быть?
SMOTE (методы передискретизации синтетического меньшинства):
SMOTE — это процесс генерирования синтетических данных вокруг исходных точек данных для класса меньшинства, чтобы сбалансировать набор данных.
Шаги:
- Случайная точка (назовем точку D для справки) выбирается из класса меньшинства.
- Затем выбирается k ближайших соседей (обычно k=5) из класса меньшинства.
- Один из соседей выбирается случайным образом (скажем, E), а синтетическая точка создается путем выбора случайной точки на линии, соединяющей две выбранные точки (т. е. D и E).
- Этот процесс повторяется, пока мы не получим сбалансированный набор данных.
Теперь давайте посмотрим на его реализацию:
Вы, ребята, видите, что применить SMOTE очень просто. Мы можем использовать библиотеку imblearn для применения SMOTE.
Если вы посмотрите на вывод, то увидите, что общее количество точек данных составляет 5 68 630 (изначально было всего 2 84 807).
Давайте посмотрим на распределение по классам:
Смотрите, теперь у нас есть одинаковые точки данных для обоих классов. Ранее было 2 84 315 точек данных для подлинных транзакций, но теперь у нас есть такое же количество точек для мошеннических транзакций.
Поэтому данные теперь сбалансированы.
Вы можете попробовать упомянутые выше методы, если вам нужно сбалансировать набор данных.
Не стесняйтесь комментировать ниже, если у вас есть какие-либо сомнения.
Всего наилучшего и удачного обучения..!!