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.
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.