El paquete scikit-learn proporciona las funciones Lasso() y LassoCV() pero no hay opción para ajustar una función logística en lugar de una lineal ... ¿Cómo realizar un lazo logístico en Python?

6
Fringant 13 ene. 2017 a las 19:47

3 respuestas

La mejor respuesta

El lazo optimiza un problema de mínimos cuadrados con una penalización L1. Por definición, no puede optimizar una función logística con Lasso.

Si desea optimizar una función logística con una penalización L1, puede usar el estimador LogisticRegression con la penalización 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)

Tenga en cuenta que solo los solucionadores LIBLINEAR y SAGA (agregado en v0.19) manejan la penalización L1.

16
TomDLT 28 mar. 2018 a las 15:57

1 scikit-learn: sklearn.linear_model.LogisticRegression

sklearn.linear_model.LogisticRegression de scikit-learn es probablemente la mejor:

Como @TomDLT dijo, Lasso es para el caso de mínimos cuadrados (regresión), no logístico (clasificación).

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

También puede usar biblioteca python-glmnet de Civis Analytics. Esto implementa la API scikit-learn BaseEstimator:

# 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)

No estoy seguro de cómo ajustar la penalización con LogitNet, pero dejaré que lo descubras.

3 otros

PyMC

También puede adoptar un enfoque totalmente bayesiano. en lugar de utilizar la optimización penalizada por L1 para encontrar una estimación puntual de sus coeficientes, puede aproximar la distribución de sus coeficientes dados sus datos. esto le da la misma respuesta que la estimación de máxima verosimilitud penalizada por L1 si usa un Laplace anterior para sus coeficientes. El previo de Laplace induce la escasez.

La gente de PyMC tiene un tutorial aquí sobre cómo configurar algo así. buena suerte.

0
grisaitis 21 abr. 2020 a las 16:45

Puedes usar glment en Python. Glmnet utiliza arranques en caliente y convergencia de conjunto activo, por lo que es extremadamente eficiente. Esa técnica hace que Glment sea más rápido que otras implementaciones de lazo. Puede descargarlo desde https://web.stanford.edu/~hastie/glmnet_python/

2
Penning Yu 24 ene. 2020 a las 18:10