Что такое несбалансированный набор данных?

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

Решения для несбалансированного набора данных

В этом посте я использую алгоритм дерева решений для несбалансированного набора данных. Прежде чем перейти к коду, позвольте мне рассказать вам о наиболее распространенном решении проблемы несбалансированного набора данных.
1. Передискретизация
Передискретизация - это метод увеличения количества экземпляров класса меньшинства, чтобы он стал равным классу большинства. Этот метод работает путем копирования количества экземпляров класса меньшинства. Один из методов, который вы можете использовать для выполнения передискретизации, - это SMOTE (техника передискретизации синтетических меньшинств).
2. Недостаточная выборка
Напротив, недостаточная выборка - это метод уменьшения количества экземпляров из класса большинства, чтобы оно было равно классу меньшинства. Метод, который вы можете использовать для выполнения недовыборки, - это случайная недовыборка.

Данные

Набор данных *, использованный в этом эксперименте, - это система обнаружения падения Китая, которую я загрузил с Kaggle.
Итак, сначала давайте взглянем на набор данных
1. Форма данных
Наши данные состоят из 16382 строк с 7 столбцами. Первый столбец с названием Деятельность - это категория, состоящая из 6 классов (0, 1, 2, 3, 4, 5).

2. Хвост данных
Вот последние 10 строк набора данных.

3. Значения NaN
На этот раз мы увидим, содержит ли набор данных отсутствующие значения.

В нашем наборе данных нет пропущенных значений, да, мы можем продолжить!

4. Распределение данных (несбалансированное)
Ниже приводится распределение экземпляров по каждому классу.

Наши данные здесь очень несбалансированы. У каждого класса разное количество экземпляров. Как видите, количество классов «0» в 8 раз больше, чем класса «1».

Модель дерева решений

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

Без предварительной обработки
Единственное, что я сделал с данными, - это просто разделил их на набор данных для обучения и тестирования с помощью функции train-test-split, а затем поместил их в модель.

#Fitting model, predict, evaluation
model = DecisionTreeClassifier()
acc1 = []
model.fit(X_train, y_train)
target_pred = model.predict(X_test)

Передискретизация
Для передискретизации я использую метод SMOTE, который предоставляется библиотекой imblearn.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
#Apply Over Sampling
print(‘Before Oversampling’)
print(sorted(Counter(y_train).items()))
X_train, y_train = SMOTE().fit_resample(X_train, y_train)
print(‘After Oversampling’)
print(sorted(Counter(y_train).items()))

Недостаточная выборка
Я использую метод Random Under Sampler также из библиотеки imblearn для техники недостаточной выборки, и вот результат.

from imblearn.under_sampling import RandomUnderSampler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
#Apply Random Under Sampling
rus = RandomUnderSampler(random_state=0)
X_train, y_train =rus.fit_resample(X_train, y_train)

Обсуждение

Давайте посмотрим на следующую гистограмму для каждой точности.

Никакая предварительная обработка и передискретизация показали почти одинаковую производительность (с разницей всего 0,01%), что говорит нам о том, что несбалансированный набор данных не влияет на производительность дерева решений. Это доказывает теорию о том, что дерево решений хорошо работает с несбалансированными данными. С другой стороны, метод недискретизации дает заметно более низкую точность. Это может быть вызвано уменьшением количества наборов данных после выполнения недостаточной выборки. Случайная избыточная выборка означает, что он будет случайным образом удалять любые данные, чтобы каждый класс имел такое же количество данных, что и класс меньшинства (в данном случае класс «1» с 502 строками). Случайная передискретизация - простой метод, но мы можем потерять важные данные.

Чтобы увидеть полный код, посетите:

Https://github.com/160shelf/decision-tree-on-imbalanced-dataset

Набор данных:
Оздемир, Ахмет Туран и Биллур Баршан. «Обнаружение падений с помощью носимых датчиков с использованием методов машинного обучения». Датчики (Базель, Швейцария) 14.6 (2014): 10691–10708. ЧВК. Интернет. 23 апреля 2017.