Это будет новая серия статей, связанных с нашей новой библиотекой Python, с любовью созданной Sigmoid. Его название похоже на второе непростительное заклинание из серии о Гарри Поттере, Круцио. Эта библиотека была создана специально для несбалансированных наборов данных с множеством различных методов, которые могут быть полезны в разных ситуациях.

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

Что такое SMOTE?

SMOTE (метод синтетической передискретизации меньшинства) - очень популярный и простой метод балансировки данных, основанный на алгоритме KNN.

Использование SMOTE от Crucio

Если вы все еще не установили Crucio, просто введите в командной строке следующее.

pip install crucio

Теперь нам нужно импортировать и использовать наш алгоритм

from crucio import SMOTE
smote = SMOTE()
new_df = smote.balance(df,'target')

Конструктор инициализации SMOTE () может содержать следующие аргументы:

  • k (int ›0, по умолчанию = 5): количество ближайших соседей, из которых SMOTE будет производить выборку точек данных.
  • seed (int, по умолчанию = 45): число, используемое для инициализации генератора случайных чисел.
  • binary_columns (list, default = None): список двоичных столбцов из набора данных, поэтому данные выборки будут округлены до ближайшего двоичного значения.

Метод balance () принимает в качестве параметров фрейм данных панды и имя целевого столбца.

Пример:

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

Базовый алгоритм Случайный лес дает точность примерно 88% за счет обучения на несбалансированных данных, так что теперь пора протестировать алгоритм SMOTE.

smote = SMOTE()
new_df = smote.balance(df,'Legendary')

new_df теперь является сбалансированными обучающими данными, и теперь мы будем обучать Random Forest на этих данных и тестировать на тех же данных, что и перед балансировкой, и теперь это дает нам точность 100%.

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

Заключение:

SMOTE - очень хороший метод для использования при несбалансированном наборе данных, поэтому я рекомендую вам протестировать его с некоторыми другими методами балансировки от Crucio, такими как SMOTETOMEK, SMOTEENN, ADASYN, ICOTE.

Сделано с ❤ от Sigmoid.