Régression Lasso de Scikit-Learn

Machine LearningMachine LearningBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire démontre l'utilisation de l'algorithme de régression Lasso de Scikit-learn sur des données denses et creuses. L'algorithme Lasso est une méthode de régression linéaire qui ajoute une pénalité aux coefficients de régression. Cette pénalité encourage le modèle à produire des coefficients sparsifiés. L'algorithme Lasso est utile dans les situations où le nombre de caractéristiques est important par rapport au nombre d'échantillons.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) 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{{"Régression Lasso de Scikit-Learn"}} sklearn/datasets -.-> lab-49189{{"Régression Lasso de Scikit-Learn"}} ml/sklearn -.-> lab-49189{{"Régression Lasso de Scikit-Learn"}} end

Importation des bibliothèques

Nous commençons par importer les bibliothèques nécessaires. Nous avons besoin de Scikit-learn, de NumPy et de 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

Générer des données denses

Ensuite, nous générons quelques données denses que nous utiliserons pour la régression Lasso. Nous utilisons la fonction make_regression de Scikit-learn pour générer 200 échantillons avec 5000 caractéristiques.

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

Entraîner Lasso sur des données denses

Maintenant, nous entraînons deux modèles de régression Lasso, l'un sur les données denses et l'autre sur les données creuses. Nous définissons le paramètre alpha sur 1 et le nombre maximum d'itérations sur 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)

Ajuster Lasso aux données denses

Nous ajustons les modèles de régression Lasso aux données denses en utilisant la fonction fit de Scikit-learn. Nous mesurons également le temps d'ajustement et affichons le temps pour chaque modèle Lasso.

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

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

Comparer les coefficients du Lasso dense et du Lasso creux

Nous comparons les coefficients du modèle Lasso dense et du modèle Lasso creux pour nous assurer qu'ils produisent les mêmes résultats. Nous calculons la norme euclidienne de la différence entre les coefficients.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance entre les coefficients : {coeff_diff:.2e}")

Générer des données creuses

Ensuite, nous générons quelques données creuses que nous utiliserons pour la régression Lasso. Nous copions les données denses de l'étape précédente et remplaçons toutes les valeurs inférieures à 2,5 par 0. Nous convertissons également les données creuses au format 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()

Entraîner Lasso sur des données creuses

Maintenant, nous entraînons deux modèles de régression Lasso, l'un sur les données denses et l'autre sur les données creuses. Nous définissons le paramètre alpha sur 0,1 et le nombre maximum d'itérations sur 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)

Ajuster Lasso aux données creuses

Nous ajustons les modèles de régression Lasso aux données creuses en utilisant la fonction fit de Scikit-learn. Nous mesurons également le temps d'ajustement et affichons le temps pour chaque modèle Lasso.

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

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

Comparer les coefficients du Lasso dense et du Lasso creux

Nous comparons les coefficients du modèle Lasso dense et du modèle Lasso creux pour nous assurer qu'ils produisent les mêmes résultats. Nous calculons la norme euclidienne de la différence entre les coefficients.

coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_)
print(f"Distance entre les coefficients : {coeff_diff:.2e}")

Sommaire

Dans ce laboratoire, nous avons démontré l'utilisation de l'algorithme de régression Lasso de Scikit-learn sur des données denses et creuses. Nous avons montré que l'algorithme Lasso fournit les mêmes résultats pour les données denses et creuses, et que dans le cas des données creuses, l'algorithme est plus rapide.