У меня есть набор данных со следующими спецификациями:
- Учебный набор данных с 193 176 пробами с 2821 положительным результатом
- Тестовый набор данных с 82 887 образцами с 673 положительными
- Есть 10 функций.
Я хочу выполнить двоичную классификацию (0 или 1). Проблема, с которой я сталкиваюсь, заключается в том, что данные очень несбалансированы. После нормализации и масштабирования данных, а также разработки некоторых функций и использования нескольких различных алгоритмов я смог достичь наилучших результатов:
mean square error : 0.00804710026904
Confusion matrix : [[82214 667]
[ 0 6]]
т.е. только 6 правильных положительных попаданий. Это использует логистическую регрессию. Вот различные вещи, которые я пробовал с этим:
- Различные алгоритмы, такие как RandomForest, DecisionTree, SVM
- Изменение значения параметров для вызова функции
- Некоторая интуитивно-ориентированная разработка функций для включения составных функций
Теперь мои вопросы:
- Что я могу сделать, чтобы улучшить количество положительных хитов?
- Как определить, есть ли в таком случае наряд? (Я пробовал строить и т. Д.)
- В какой момент можно сделать вывод, что, возможно, это наилучшее из возможных совпадений? (что грустно, учитывая только 6 хитов из 673)
- Есть ли способ, которым я мог бы сделать так, чтобы положительные экземпляры весили больше, чтобы распознавание образов улучшалось, приводя к большему количеству попаданий?
- Какие графические графики могут помочь обнаружить выбросы или некоторую интуицию о том, какой шаблон подойдет лучше всего?
Я использую библиотеку scikit-learn с Python, и все реализации являются библиотечными функциями.
редактировать:
Вот результаты с несколькими другими алгоритмами:
Классификатор случайных лесов (n_estimators = 100)
[[82211 667]
[ 3 6]]
Деревья решений:
[[78611 635]
[ 3603 38]]
Поскольку данные сильно искажены, в таком случае мы также можем попробовать обучение модели после чрезмерной выборки данных.
источник