У меня есть набор данных с 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, так как он находится в сбалансированном векторе класса.
Я столкнулся с подобной ситуацией, вы поняли какое-либо решение? – Charlotte