Проблема, которую вы подняли, кажется довольно расплывчатой, но я вполне уверен, что ваша логистическая регрессия не сходится. Я не совсем уверен, почему вы сейчас включаете штрафной санкция «L2», если вы не беспокоитесь о переоснащении. Во всяком случае, если вы посмотрите на sklearn docs , он говорит:
Алгоритм использования в задаче оптимизации.
Для небольших наборов данных «liblinear» - хороший выбор, тогда как «sag» и «saga» быстрее для больших.
Для задач мультикласса только 'newton-cg', 'sag', 'saga' и 'lbfgs' обрабатывают многочленовую потерю; «Liblinear» ограничен схемами «один против остальных».
«Newton-cg», «lbfgs» и «sag» обрабатывают только штраф L2, тогда как «liblinear» и «saga» обрабатывают штраф L1.
Обратите внимание, что быстрая сходимость «sag» и «saga» гарантируется только для функций с примерно одинаковым масштабом. Вы можете предварительно обработать данные с помощью скейлера из sklearn.preprocessing.
Я бы сразу предложил вам добавить параметр `solver = sag '(или любой другой решатель, который может обрабатывать штраф L2), поскольку в документах четко сказано, что только определенные решатели могут обрабатывать штраф L2, а только для решателя по умолчанию liblinear обрабатывает штраф L1 . Вот этот действительно хороший пост о решателях логистической регрессии, который вы можете посмотреть для своего набора данных:
Решатели для логистической регрессии
Имейте в виду, что регуляризация L2 и L1 связана с переоснащением, и поэтому вы даже можете изменить параметр C в своем определении lr. Пожалуйста, посмотрите документацию по sklearn для получения дополнительной информации. Надеюсь это поможет.