Ruta de regularización de la regresión logística L1

Entrenar modelos de regresión logística con penalización l1 en un problema de clasificación binaria derivado del conjunto de datos Iris.

Los modelos están ordenados de mayor a menor regularización. Los 4 coeficientes de los modelos se recogen y se grafican como una «ruta de regularización»: en el lado izquierdo de la figura (regularizadores fuertes), todos los coeficientes son exactamente 0. Cuando la regularización se hace progresivamente más floja, los coeficientes pueden obtener valores distintos de cero uno tras otro.

Aquí elegimos el solucionador liblinear porque puede optimizar eficientemente la pérdida de Regresión Logística con una penalización l1 no suave y que induce a la dispersión.

También hay que tener en cuenta que establecemos un valor bajo de tolerancia para asegurarnos de que el modelo ha convergido antes de recoger los coeficientes.

También utilizamos warm_start=True, lo que significa que los coeficientes de los modelos se reutilizan para inicializar el siguiente ajuste del modelo para acelerar el cálculo de la ruta completa.

Logistic Regression Path

Out:

Computing regularization path ...
This took 0.046s

print(__doc__)

# Author: Alexandre Gramfort <alexandre.gramfort@inria.fr>
# License: BSD 3 clause

from time import time
import numpy as np
import matplotlib.pyplot as plt

from sklearn import linear_model
from sklearn import datasets
from sklearn.svm import l1_min_c

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X[y != 2]
y = y[y != 2]

X /= X.max()  # Normalize X to speed-up convergence

# #############################################################################
# Demo path functions

cs = l1_min_c(X, y, loss='log') * np.logspace(0, 7, 16)


print("Computing regularization path ...")
start = time()
clf = linear_model.LogisticRegression(penalty='l1', solver='liblinear',
                                      tol=1e-6, max_iter=int(1e6),
                                      warm_start=True,
                                      intercept_scaling=10000.)
coefs_ = []
for c in cs:
    clf.set_params(C=c)
    clf.fit(X, y)
    coefs_.append(clf.coef_.ravel().copy())
print("This took %0.3fs" % (time() - start))

coefs_ = np.array(coefs_)
plt.plot(np.log10(cs), coefs_, marker='o')
ymin, ymax = plt.ylim()
plt.xlabel('log(C)')
plt.ylabel('Coefficients')
plt.title('Logistic Regression Path')
plt.axis('tight')
plt.show()

Tiempo total de ejecución del script: ( 0 minutos 0.149 segundos)

Galería generada por Sphinx-Gallery