Модель двоичной классификации для несбалансированных данных

14

У меня есть набор данных со следующими спецификациями:

  • Учебный набор данных с 193 176 пробами с 2821 положительным результатом
  • Тестовый набор данных с 82 887 образцами с 673 положительными
  • Есть 10 функций.

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

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

т.е. только 6 правильных положительных попаданий. Это использует логистическую регрессию. Вот различные вещи, которые я пробовал с этим:

  • Различные алгоритмы, такие как RandomForest, DecisionTree, SVM
  • Изменение значения параметров для вызова функции
  • Некоторая интуитивно-ориентированная разработка функций для включения составных функций

Теперь мои вопросы:

  1. Что я могу сделать, чтобы улучшить количество положительных хитов?
  2. Как определить, есть ли в таком случае наряд? (Я пробовал строить и т. Д.)
  3. В какой момент можно сделать вывод, что, возможно, это наилучшее из возможных совпадений? (что грустно, учитывая только 6 хитов из 673)
  4. Есть ли способ, которым я мог бы сделать так, чтобы положительные экземпляры весили больше, чтобы распознавание образов улучшалось, приводя к большему количеству попаданий?
  5. Какие графические графики могут помочь обнаружить выбросы или некоторую интуицию о том, какой шаблон подойдет лучше всего?

Я использую библиотеку scikit-learn с Python, и все реализации являются библиотечными функциями.

редактировать:

Вот результаты с несколькими другими алгоритмами:

Классификатор случайных лесов (n_estimators = 100)

[[82211   667]
[    3     6]]

Деревья решений:

[[78611   635]
[ 3603    38]]
tejaskhot
источник

Ответы:

11
  1. Поскольку вы выполняете бинарную классификацию, пытались ли вы отрегулировать порог классификации? Поскольку ваш алгоритм кажется довольно нечувствительным, я бы попробовал понизить его и проверить, есть ли улучшения.

  2. Вы всегда можете использовать кривые обучения или график зависимости одного параметра модели от ошибки обучения и проверки, чтобы определить, подходит ли ваша модель. Кажется, в вашем случае это не совсем подходит, но это только интуиция.

  3. Ну, в конечном счете, это зависит от вашего набора данных и разных моделей, которые вы пробовали. На данный момент и без дальнейшего тестирования не может быть однозначного ответа.

  4. Не претендуя на звание эксперта по этой теме, вы можете следовать ряду различных приемов (подсказка: первая ссылка в Google ), но, на мой взгляд, вы должны сначала убедиться, что вы тщательно выбрали свою функцию стоимости, чтобы она соответствовала вы на самом деле ищете.

  5. Не уверен, что вы подразумеваете под шаблонной интуицией, можете ли вы уточнить?

Кстати, каковы были ваши результаты с разными алгоритмами, которые вы пробовали? Они были другими?

INSYS
источник
1
Регулировка порога для логистической регрессии сделала свое дело. Спасибо за список источников.
tejaskhot
Может кто-нибудь вставить фрагмент кода того, как вы настраиваете порог логистической регрессии?
Бленц
0

Поскольку данные сильно искажены, в таком случае мы также можем попробовать обучение модели после чрезмерной выборки данных.

SMOTE и ADASYN - это некоторые из методов, которые мы можем использовать для перевыбора данных.

Vipin Bansal
источник