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)

Сообщите мне, если потребуется более глубокое понимание.