Рубрики
Без рубрики

Smote и Adasyn для обработки дисбалансных данных классификации

Сегодня я охватываю несбалансированные классификационные проблемы в машинном обучении с использованием увеличения данных Smote и Adasyn. Сложность….

Автор оригинала: Pankaj Kumar.

Сегодня я охватываю несбалансированные классификационные проблемы в машинном обучении с использованием увеличения данных Smote и Adasyn.

Основы классификации в машинном обучении

Классификация Может быть определен как процесс прогнозирования класса или категории от наблюдаемых значений или точек данных.

Идентификация спама в электронных письмах может быть примером задачи классификации. Там могут быть только два типа производительности, «спам» и «нет-спам»; Таким образом, это классификация двоичного вида.

Другие примеры:

  • Обнаружение мошенничества.
  • Прогноз претензий
  • Прогноз по умолчанию.
  • Прогноз оттуды.
  • Обнаружение спама.
  • Обнаружение аномалии.
  • Обнаружение выброса.
  • Обнаружения вторжений
  • Прогноз преобразования

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

Имасштабные наборы данных и его эффекты

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

Скажи, что ваш набор данных экспериментирован.

Вы создаете модель для классификации и автоматически получаете на 90 процентов точности. Вы переплетены.

Но когда вы копаете немного дальше и обнаружили, что 90% материала принадлежат одному классу. Когда вы обнаружили, что ваши данные имели несбалансированные группы, вы чувствовали себя очень разочарованы, и что все фантастические результаты, которые вы верили, что вы получали, оказалось, что ложь. 🙁.

Как узнать, когда данные невыбалансированы

Двусбалансированные данные Относится к обеспомочению с проблемами классификации, в которых группы не являются одинаковыми распределенными.

Например, с 100 экземплярами (строками) у вас может быть проблема 2 класса (двоичной) классификации. Class-1 классифицируется в общей сложности 80 экземпляров, а класс-2 классифицируется для оставшихся 20 событий.

Это дисбалансский набор данных, с 80:20 или более сжатым соотношением 4: 1 класса-1 к примерам класса-2.

Техника для решения с несбалансированными данными

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

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

Что такое Smote?

Smote коротка для Техника перемотания из синтетической меньшинства Отказ

Если у вас есть 100 рядов данных, и вам нужно выбрать 10 из них, это довольно легко. Вы просто случайным образом образец 10 элементов из набора данных. Это называется Недостаток Отказ Противоположное известно как перевезти Отказ

Поэтому, если у вас есть проблема с двоичной классификацией с 100 строками данных в одном классе и 10 строках данных в другом классе, вы могли бы просто дублировать примеры из класса меньшинств в наборе тренировочного набора, прежде чем удерживать модель.

Это может сбалансировать распределение класса, но не предоставляет модели любыми дополнительными деталями.

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

Перемотание с Smote.

Мы будем использовать Sklearn Библиотека для этой цели. В этом случае мы создаем пользовательский набор данных с 5000 образцов.

from imblearn.over_sampling import SMOTE
from sklearn.datasets import make_classification
import matplotlib.pyplot as plt

Теперь мы используем функцию make_classification:

X, y = make_classification(n_samples=5000, n_features=2, n_redundant=0, weights=[.99], n_informative=2, n_clusters_per_class=1)

Мой оказался как:

Построение данных

Мы будем использовать Матплотлиб :

plt.scatter(X[:, 0], X[:, 1], marker='o', c=y, s=25, edgecolor='k')

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

Так что балансировать это, мы будем использовать Smote:

Теперь мы видим, что набор данных был сбалансирован:

Что такое Адасин?

Коротко для Адаптивный подход синтетического отбора проб , обобщение алгоритма Smote.

Создавая виртуальные экземпляры для этого, этот алгоритм также пытается перераспределить класс меньшинств.

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

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

Передисредство с Адасином

Давайте попробуем построить тот же набор данных с Адасином.

from imblearn.over_sampling import ADASYN

ada = ADASYN()
x_ada , Y_ada = ada.fit_resample(X_,y_)
plt.scatter(x_ada[:, 0], x_ada[:, 1], marker='o', c=Y_ada, s=25, edgecolor='k')

Что значительно в обоих участках?

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

Пытаясь улыбнуть на реальном наборе данных

Вы хотите увидеть это в действии на реальном наборе данных? Давайте возьмем этот: https://www.kaggle.com/clmentbisaillon/fake-and-real-news-dataset.

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

Так что это наши данные: (мы добавили этикетки на основе тех, которые даны на Kaggle))

Вы можете, очевидно, видно, что данные очень небалансятся в 1:10 для поддельных новостей. В таких случаях все алгоритмы прогнозируют 100% статей как поддельных, максимизировать его точность. Но это определенно не так.

Поэтому нам нужно смутить сбалансировать набор данных. Сначала мы изменим текст в численные значения по векторизатору TFIDF (что мы узнаем позже):

Соблюдайте тесно среди генерируемых наборов данных, и они очень похожи на фактические данные, и в настоящее время набор данных сбалансирован в соотношении 1: 1, поэтому нет смещения для алгоритмов классификации:

И это за сегодня. Продолжайте возвращаться, и у нас намного больше тем в магазине! Конечно, если вы ничего не пропустили, вы найдете все код здесь:

https://github.com/arkaprabha-majumdar/smote-for-data-numbers-and-text