Regresión Lasso de Scikit-Learn

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica demuestra el uso del algoritmo de regresión Lasso de Scikit-learn en datos densos y dispersos. El algoritmo Lasso es un método de regresión lineal que agrega una penalización a los coeficientes de regresión. Esta penalización incentiva al modelo a producir coeficientes dispersos. El algoritmo Lasso es útil en situaciones donde el número de características es grande en comparación con el número de muestras.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49189{{"Regresión Lasso de Scikit-Learn"}} sklearn/datasets -.-> lab-49189{{"Regresión Lasso de Scikit-Learn"}} ml/sklearn -.-> lab-49189{{"Regresión Lasso de Scikit-Learn"}} end

Importar bibliotecas

Comenzamos importando las bibliotecas necesarias. Necesitamos Scikit-learn, NumPy y SciPy.

from time import time
from scipy import sparse
from scipy import linalg
from sklearn.datasets import make_regression
from sklearn.linear_model import Lasso

Generar datos densos

A continuación, generamos algunos datos densos que usaremos para la regresión Lasso. Utilizamos la función make_regression de Scikit-learn para generar 200 muestras con 5000 características.

X, y = make_regression(n_samples=200, n_features=5000, random_state=0)

Entrenar Lasso con datos densos

Ahora entrenamos dos modelos de regresión Lasso, uno con los datos densos y otro con los datos dispersos. Establecemos el parámetro alpha en 1 y el número máximo de iteraciones en 1000.

alpha = 1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000)

Ajustar Lasso a datos densos

Ajustamos los modelos de regresión Lasso a los datos densos utilizando la función fit de Scikit-learn. También medimos el tiempo del proceso de ajuste y mostramos el tiempo para cada modelo Lasso.

t0 = time()
sparse_lasso.fit(X_sp, y)
print(f"Sparse Lasso hecho en {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(X, y)
print(f"Dense Lasso hecho en {(time() - t0):.3f}s")

Comparar los coeficientes del Lasso denso y el Lasso disperso

Comparamos los coeficientes del modelo Lasso denso y el modelo Lasso disperso para asegurarnos de que estén produciendo los mismos resultados. Calculamos la norma Euclidiana de la diferencia entre los coeficientes.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distancia entre los coeficientes : {coeff_diff:.2e}")

Generar datos dispersos

A continuación, generamos algunos datos dispersos que usaremos para la regresión Lasso. Copiamos los datos densos del paso anterior y reemplazamos todos los valores menores que 2.5 por 0. También convertimos los datos dispersos al formato Compressed Sparse Column de Scipy.

Xs = X.copy()
Xs[Xs < 2.5] = 0.0
Xs_sp = sparse.coo_matrix(Xs)
Xs_sp = Xs_sp.tocsc()

Entrenar Lasso con datos dispersos

Ahora entrenamos dos modelos de regresión Lasso, uno con los datos densos y otro con los datos dispersos. Establecemos el parámetro alpha en 0.1 y el número máximo de iteraciones en 10000.

alpha = 0.1
sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)
dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000)

Ajustar Lasso a datos dispersos

Ajustamos los modelos de regresión Lasso a los datos dispersos utilizando la función fit de Scikit-learn. También medimos el tiempo del proceso de ajuste y mostramos el tiempo para cada modelo Lasso.

t0 = time()
sparse_lasso.fit(Xs_sp, y)
print(f"Sparse Lasso hecho en {(time() - t0):.3f}s")

t0 = time()
dense_lasso.fit(Xs, y)
print(f"Dense Lasso hecho en  {(time() - t0):.3f}s")

Comparar los coeficientes del Lasso denso y el Lasso disperso

Comparamos los coeficientes del modelo Lasso denso y el modelo Lasso disperso para asegurarnos de que estén produciendo los mismos resultados. Calculamos la norma Euclidiana de la diferencia entre los coeficientes.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distancia entre los coeficientes : {coeff_diff:.2e}")

Resumen

En este laboratorio, demostramos el uso del algoritmo de regresión Lasso de Scikit-learn en datos densos y dispersos. Mostramos que el algoritmo Lasso produce los mismos resultados para datos densos y dispersos, y que en el caso de datos dispersos, el algoritmo es más rápido.