Результаты, которые вы показываете, определенно кажутся немного обескураживающими для методов, которые вы предлагаете, и баланса данных, которые вы описываете. Тем не менее, из описания проблемы, безусловно, есть много возможностей для улучшения.
Когда вы используете train_test_split
, убедитесь, что вы передали stratify=endreason
, чтобы убедиться, что нет проблем с метками при разбиении набора данных. Перейдем к полезным пунктам для улучшения вашей модели:
Прежде всего, уменьшение размерности : поскольку вы имеете дело со многими функциями, некоторые из них могут оказаться бесполезными или даже загрязнить проблему классификации. пытаемся решить. Очень важно рассмотреть вопрос о том, как приспособить различные методы уменьшения размера к вашим данным и использовать эти адаптированные данные для подачи в вашу модель. Некоторые общие подходы, которые стоит попробовать:
- PCA (анализ главных компонентов)
- Фильтр низкой дисперсии и корреляции
- Важность функции случайных лесов
Во-вторых понимание модели : Хотя Logisti c Регрессия может оказаться отличной базой для линейного классификатора, это не обязательно будет то, что вам нужно для этой задачи , Случайные леса кажутся намного лучше при захвате нелинейных отношений, но их необходимо контролировать и сокращать, чтобы избежать переобучения и может потребовать много данных. С другой стороны, SVM - очень мощный метод с нелинейными ядрами, но он может оказаться неэффективным при работе с огромными объемами данных. XGBoost и LightGBM - это очень мощные алгоритмы повышения градиента, которые выиграли несколько соревнований по борьбе и успешно работают почти во всех случаях, конечно, требуется некоторая предварительная обработка, как XGBoost не подготовлен для работы с категориальными функциями (LightGBM есть). Мое предложение состоит в том, чтобы попробовать эти последние 2 метода. От худшего к последнему (в общем случае сценарий ios) я бы перечислил:
- LightGBM / XGBoost
- RandomForest / SVM / Logisti c Регрессия
Последнее, но не менее важное Настройка гиперпараметра : Независимо от выбранного вами метода, всегда будет какая-то подстройка, которую необходимо выполнить. Sklearn предлагает gridsearch , что очень удобно. Однако вам необходимо понять, как ведут себя ваши классификаторы, чтобы понять, что вам следует искать. Я не буду go углубляться в это, поскольку это будет вне топи c и не подходит для SO, но вы можете определенно прочитать здесь