Почему реализация весов классов делает модель хуже - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь выполнить бинарную классификацию, и один класс (0) составляет примерно одну треть от другого класса (1). когда я запускаю необработанные данные через обычную прямую нейронную сеть, точность составляет около 0,78 Однако, когда я реализую class_weights, точность падает примерно до 0,49. Кривая roc также кажется лучше без class_weights. Почему это происходит, и как я могу это исправить?

Я уже пытался изменить модель, внедрить регуляризацию, выпадения и т. Д. Но, похоже, ничто не меняет общую точность

вот так я получаю свои веса: class_weights = class_weight.compute_class_weight('balanced', np.unique(y_train), y_train) class_weight_dict = dict(enumerate(class_weights))

Вот результаты без весов:

enter image description here enter image description here enter image description here

Вот с весами:

enter image description here enter image description here enter image description here

Я ожидал бы, что результаты с class_weights будут лучше, но, похоже, все наоборот. Даже Рок, кажется, не работает лучше с весами.

1 Ответ

0 голосов
/ 21 июня 2019

Из-за дисбаланса класса очень слабая базовая линия всегда выбора мажоритарного класса даст точность приблизительно 75%.

Кривая проверки сети, которая была обучена без весов классов, показывает, что она выбирает решение, близкое к выбору большинства классов. Это видно из того, что сеть значительно не улучшается по сравнению с точностью проверки, которую она получает в 1-ю эпоху.

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

...