Как выполнить логистическое лассо в питоне?

Пакет scikit-learn предоставляет функции Lasso() а также LassoCV() но нет возможности уместить логистическую функцию вместо линейной... Как выполнить логистическое лассо в python?

1 ответ

Лассо оптимизирует задачу наименьших квадратов со штрафом L1. По определению вы не можете оптимизировать логистическую функцию с помощью Лассо.

Если вы хотите оптимизировать логистическую функцию со штрафом L1, вы можете использовать LogisticRegression оценщик со штрафом L1:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
log = LogisticRegression(penalty='l1', solver='liblinear')
log.fit(X, y)

Обратите внимание, что только решатели LIBLINEAR и SAGA (добавлены в v0.19) обрабатывают штраф L1.

Вы можете использовать glment в Python. Glmnet использует теплый старт и конвергенцию активных наборов, поэтому он чрезвычайно эффективен. Эти методы делают glment быстрее, чем другие реализации лассо. Вы можете скачать его с https://web.stanford.edu/~hastie/glmnet_python/

1 scikit-learn: sklearn.linear_model.LogisticRegression

sklearn.linear_model.LogisticRegression from scikit-learn, вероятно, лучший:

как сказал@TomDLT,Lasso для случая наименьших квадратов (регрессия), а не для логистики (классификация).

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(
    penalty='l1',
    solver='saga',  # or 'liblinear'
    C=regularization_strength)

model.fit(x, y)

2 python-glmnet: glmnet.LogitNet

Вы также можете использовать библиотеку python-glmnet Civis Analytics. Это реализует scikit-learnBaseEstimator API:

# source: https://github.com/civisanalytics/python-glmnet#regularized-logistic-regression

from glmnet import LogitNet

m = LogitNet(
    alpha=1,  # 0 <= alpha <= 1, 0 for ridge, 1 for lasso
)
m = m.fit(x, y)

Я не знаю, как скорректировать пенальти с помощью LogitNet, но я позволю тебе понять это.

3 другие

PyMC

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

у ребят из PyMC есть руководство по настройке чего-то подобного. удачи.

Другие вопросы по тегам