Sélection de caractéristiques conjointe avec Lasso multi-tâches

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

Dans ce laboratoire, nous allons explorer la manière de réaliser une sélection de caractéristiques conjointe à l'aide de l'algorithme Lasso multi-tâches. Nous utiliserons scikit-learn, une bibliothèque populaire de machine learning en Python, pour générer des données d'échantillonnage et ajuster des modèles à ces données. Nous tracerons ensuite les résultats des modèles pour voir comment ils se comparent.

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 Carnet d'étude pour accéder au carnet Jupyter pour la pratique.

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49220{{"Sélection de caractéristiques conjointe avec Lasso multi-tâches"}} ml/sklearn -.-> lab-49220{{"Sélection de caractéristiques conjointe avec Lasso multi-tâches"}} end

Générer des données

Tout d'abord, nous devons générer des données d'échantillonnage que nous pouvons utiliser pour ajuster nos modèles. Nous utiliserons numpy pour générer 100 échantillons, chacun avec 30 caractéristiques et 40 tâches. Nous sélectionnerons également au hasard 5 caractéristiques pertinentes et créerons des coefficients pour elles à l'aide d'ondes sinusoïdales avec une fréquence et une phase aléatoires. Enfin, nous ajouterons du bruit aléatoire aux données.

import numpy as np

rng = np.random.RandomState(42)

## Générer quelques coefficients 2D avec des ondes sinusoïdales avec une fréquence et une phase aléatoires
n_samples, n_features, n_tasks = 100, 30, 40
n_relevant_features = 5
coef = np.zeros((n_tasks, n_features))
times = np.linspace(0, 2 * np.pi, n_tasks)
for k in range(n_relevant_features):
    coef[:, k] = np.sin((1.0 + rng.randn(1)) * times + 3 * rng.randn(1))

X = rng.randn(n_samples, n_features)
Y = np.dot(X, coef.T) + rng.randn(n_samples, n_tasks)

Ajuster des modèles

Maintenant que nous avons nos données, nous pouvons ajuster des modèles à l'aide des algorithmes Lasso et Lasso multi-tâches. Nous ajusterons un modèle Lasso pour chaque tâche puis un modèle Lasso multi-tâches à toutes les tâches d'un coup.

from sklearn.linear_model import MultiTaskLasso, Lasso

coef_lasso_ = np.array([Lasso(alpha=0.5).fit(X, y).coef_ for y in Y.T])
coef_multi_task_lasso_ = MultiTaskLasso(alpha=1.0).fit(X, Y).coef_

Tracer les résultats

Enfin, nous pouvons tracer les résultats de nos modèles pour voir comment ils se comparent. Nous tracerons le support (c'est-à-dire l'emplacement des coefficients non nuls) pour chaque modèle, ainsi que la série temporelle d'une des caractéristiques.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
plt.spy(coef_lasso_)
plt.xlabel("Caractéristique")
plt.ylabel("Temps (ou Tâche)")
plt.text(10, 5, "Lasso")
plt.subplot(1, 2, 2)
plt.spy(coef_multi_task_lasso_)
plt.xlabel("Caractéristique")
plt.ylabel("Temps (ou Tâche)")
plt.text(10, 5, "MultiTaskLasso")
fig.suptitle("Emplacement des coefficients non nuls")

feature_to_plot = 0
plt.figure()
lw = 2
plt.plot(coef[:, feature_to_plot], color="seagreen", linewidth=lw, label="Vérité terrain")
plt.plot(
    coef_lasso_[:, feature_to_plot], color="cornflowerblue", linewidth=lw, label="Lasso"
)
plt.plot(
    coef_multi_task_lasso_[:, feature_to_plot],
    color="gold",
    linewidth=lw,
    label="MultiTaskLasso",
)
plt.legend(loc="upper center")
plt.axis("tight")
plt.ylim([-1.1, 1.1])
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à effectuer une sélection de caractéristiques conjointe à l'aide de l'algorithme Lasso multi-tâches. Nous avons généré des données d'échantillonnage, ajusté des modèles à l'aide de Lasso et de Lasso multi-tâches, et tracé les résultats. Nous pouvons constater que l'algorithme Lasso multi-tâches est mieux à même de sélectionner les caractéristiques pertinentes pour toutes les tâches par rapport à l'algorithme Lasso.