Nota
Haz clic en aquí para descargar el código de ejemplo completo o para ejecutar este ejemplo en tu navegador a través de Binder
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.
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)