3

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

Y1 - классы довольно сбалансированы (0 - 52%/1- 48%)

У2 - классы очень несбалансированные (0 - 90%/1 - 10%)

Я разделил набор данных на учебный комплект (4000 образцов) и тестовый набор (1000 образцов).

Тогда я написал простой код, чтобы получить набор данных X и класса вектор Y, и создал сбалансированный набор данных с len = 2 X number of minority class.

Например, в наборе учебных материалов, приведенном выше, с использованием вектора класса 90%/10%, будет 400 1 с и 3,200 0, поэтому он создаст новый набор данных 800 образцов с исходными 400 образцами класса 1 и 400 случайно выбранных образцов класса 0, которые будут сбалансированы.

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

Затем я использую модель, созданную на дополнительных 1000 образцах (набор тестов).

Я запустил балансировочный код для обоих векторов классов - сбалансированный и несбалансированный (хотя я не нуждался в нем в сбалансированном векторе класса).

При использовании вектора сбалансированного класса, я получаю эту запутанную матрицу для тестового набора 1000 проб:

[339 126 

288 246] 

    precision recall f1-score support 

0.0  0.54  0.73  0.62  465 
1.0  0.66  0.46  0.54  534 
avg/total 0.61 0.59 0.58 999 

При использовании вектора несбалансированного класса, я получаю эту запутанную матрицу для тестового набора 1000 проб:

[574 274 

73 78] 

    precision recall f1-score support 

0.0  0.89  0.68  0.77  848 
1.0  0.22  0.52  0.31  151 
avg/total 0.79 0.65 0.70 999 

Как вы можете видеть, точность класса 1 очень низкая.

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

Не могли бы вы посоветовать, что бы вы сделали в такой ситуации? Моя цель - попытаться довести точность класса 1 в неуравновешенном векторе класса примерно до 0,6, так как он находится в сбалансированном векторе класса.

+0

Я столкнулся с подобной ситуацией, вы поняли какое-либо решение? – Charlotte

ответ

0

На вашем месте я бы поставил пропорционально больший вес на недопредставленный класс. XGBoost предоставляет богатый набор параметров, с помощью которых вы можете играть, чтобы построить хорошую модель. This article подробно обсуждает их для Python. Проверьте конкретный параметр scale_pos_weight.

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