Это будет новая серия статей, связанных с нашей новой библиотекой 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.