ValueError: Solver lbfgs поддерживает только штрафы 'l2' или 'none', получил штраф l1 - PullRequest
1 голос
/ 26 марта 2020

Я запускаю процесс выбора функции для задачи классификации, используя встроенный метод (L1 - Лассо) с LogisticRegression.

Я запускаю следующий код:

from sklearn.linear_model import Lasso, LogisticRegression
from sklearn.feature_selection import SelectFromModel

# using logistic regression with penalty l1.
selection = SelectFromModel(LogisticRegression(C=1, penalty='l1'))
selection.fit(x_train, y_train)

Но я получаю исключение (по команде fit):

   selection.fit(x_train, y_train)
   File "C:\Python37\lib\site-packages\sklearn\feature_selection\_from_model.py", line 222, in fit
   self.estimator_.fit(X, y, **fit_params)
   File "C:\Python37\lib\site-packages\sklearn\linear_model\_logistic.py", line 1488, in fit
   solver = _check_solver(self.solver, self.penalty, self.dual)
   File "C:\Python37\lib\site-packages\sklearn\linear_model\_logistic.py", line 445, in _check_solver
   "got %s penalty." % (solver, penalty))
   ValueError: Solver lbfgs supports only 'l2' or 'none' penalties, got l1 penalty.

Я работаю под python 3.7.6 и s scikit-learn version is 0.22.2.post1

Что не так и как можно Я это исправлю?

Ответы [ 2 ]

5 голосов
/ 26 марта 2020

Это выясняется в документации .

solver: {'newton-cg', 'lbfgs', 'liblinear', ' sag ',' saga '}, по умолчанию =' lbfgs '

...

  • ' newton-cg ',' lbfgs ', 'sag' и 'saga' обрабатывают L2 или без штрафа

  • 'liblinear' и 'saga' также обрабатывают L1 штраф

Назовите это так:

LogisticRegression(C=1, penalty='l1', solver='liblinear')
0 голосов
/ 03 мая 2020

Поскольку l1 поддерживается решателем 'liblinear'. Всегда указывайте solver = 'liblinear' с штрафом = 'l1'

selection = SelectFromModel (LogisticRegression (C = 1, штраф = 'l1', solver = 'liblinear'))

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