Передискретизация SMOTE создает новые точки данных

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

 for i in X_train.columns:
    print(i+':',X_train[i].value_counts().shape[0])

 Pclass: 3
 Sex: 2
 IsAlone: 2
 Title: 5
 IsCabin: 2
 AgeBin: 4
 FareBin: 4

Применение SMOTE к обучающим данным после train_test_split. Создаются новые значения, которых нет в наборе данных X_train.

 from imblearn.over_sampling import SMOTE
 from collections import Counter
 #removing the random_state dosent help
 sm = SMOTE(random_state=0)
 X_res, y_res = sm.fit_resample(X_train, y_train)
 print('Resampled dataset shape %s' % Counter(y_res))

 Resampled dataset shape Counter({1: 381, 0: 381})

Подсчет значений повторно дискретизированного набора данных:

 Pclass: 16
 Sex: 7
 IsAlone: 2
 Title: 12
 IsCabin: 2
 AgeBin: 4
 FareBin: 4

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

Пример:

X_train-Pclass 1-20,2-15,3-40
X_res-Pclass 1-20,0.999999-3,2-11,1.9999999-4,3-34,2.9999999-6

Мой вопрос:

  1. Почему создаются эти ценности и имеют ли они какое-то значение?

  2. Как с ними бороться? Должен ли я просто округлить их или удалить их

  3. Есть ли способ выполнить избыточную или недостаточную выборку без создания этих новых значений?


person Nitin Kumar    schedule 17.03.2020    source источник


Ответы (1)


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

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

Как сказано в этой исходной статье SMOTE, "класс меньшинств подвергается избыточной выборке взяв образец каждого класса меньшинства и представив синтетические примеры вдоль отрезков линии, соединяющих любые / все k ближайших соседей класса меньшинства. "

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

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

Как видите, после применения SMOTE (Рисунок b) он сгенерирует новые точки данных для класса меньшинства (в данном случае для < strong> class 1), чтобы сбалансировать набор данных.


Попробуйте прочитать:

  1. http://rikunert.com/SMOTE_explained

  2. https://machinelearningmaster.com/smote-oversampling-for-imbalanced-classification/ < / а>

person Harshil    schedule 17.03.2020