Sklearn логистическая регрессия с неуравновешенными классами
Я решаю проблему классификации с логической регрессией sklearn в python.
Моя проблема - общая/общая. У меня есть набор данных с двумя классами/результатом (положительный/отрицательный или 1/0), но набор очень неуравновешен. Есть ~ 5% положительных и ~ 95% негативов.
Я знаю, что существует несколько способов справиться с неуравновешенной проблемой, подобной этой, но не нашли правильного объяснения того, как правильно реализовать пакет sklearn.
То, что я сделал до сих пор, состоит в том, чтобы построить сбалансированный набор тренировок, выбрав записи с положительным результатом и равным количеством случайно выбранных отрицательных записей. Затем я смогу обучить модель этому набору, но я застрял в том, как модифицировать модель, чтобы затем работать с исходной неуравновешенной совокупностью/множеством.
Каковы конкретные шаги для этого? Я наполнил документацию и примеры sklearn и не нашел хорошего объяснения.
Ответы
Ответ 1
Вы пытались перейти к вашему классификатору class_weight="auto"
? Не все классификаторы в sklearn поддерживают это, но некоторые делают. Проверьте докстоки.
Также вы можете перебалансировать свой набор данных, случайно отбросив отрицательные примеры и/или избыточные примеры положительных примеров (+ потенциально добавляя некоторые незначительные гауссовские шумы).
Ответ 2
@agentscully Прочитали ли вы следующую статью,
[SMOTE] (https://www.jair.org/media/953/live-953-2037-jair.pdf).
Я нашел то же самое очень информативное. Вот ссылка на Repo.
В зависимости от того, как вы собираетесь балансировать ваши целевые классы, вы можете использовать
- 'auto': (устарел в более новой версии 0.17) или "сбалансирован" или укажите отношение класса самостоятельно {0: 0.1, 1: 0.9}.
- "сбалансированный" : этот режим регулирует вес, обратно пропорциональный частотам класса
n_samples / (n_classes * np.bincount(y)
Сообщите мне, если потребуется более глубокое понимание.