Selección conjunta de características con Lasso multitarea

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

En este laboratorio, exploraremos cómo realizar la selección conjunta de características utilizando el algoritmo Lasso multitarea. Utilizaremos scikit-learn, una popular biblioteca de aprendizaje automático de Python, para generar algunos datos de muestra y ajustar modelos a ellos. Luego graficaremos los resultados de los modelos para ver cómo se comparan.

Consejos sobre la VM

Una vez que se haya completado 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 algunos segundos a que Jupyter Notebook termine de cargarse. La validación de 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 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"]) 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{{"Selección conjunta de características con Lasso multitarea"}} ml/sklearn -.-> lab-49220{{"Selección conjunta de características con Lasso multitarea"}} end

Generar datos

Primero, necesitamos generar algunos datos de muestra que podamos utilizar para ajustar nuestros modelos. Utilizaremos numpy para generar 100 muestras, cada una con 30 características y 40 tareas. También seleccionaremos al azar 5 características relevantes y crearemos coeficientes para ellas utilizando ondas sinusoidales con frecuencia y fase aleatorias. Finalmente, agregaremos algo de ruido aleatorio a los datos.

import numpy as np

rng = np.random.RandomState(42)

## Generate some 2D coefficients with sine waves with random frequency and phase
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)

Ajustar modelos

Ahora que tenemos nuestros datos, podemos ajustar modelos a ellos utilizando los algoritmos Lasso y Lasso multitarea. Ajustaremos un modelo Lasso para cada tarea y luego ajustaremos un modelo Lasso multitarea a todas las tareas a la vez.

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_

Graficar resultados

Finalmente, podemos graficar los resultados de nuestros modelos para ver cómo se comparan. Graficaremos el soporte (es decir, la ubicación de los coeficientes no nulos) para cada modelo, así como la serie temporal de una de las características.

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 5))
plt.subplot(1, 2, 1)
plt.spy(coef_lasso_)
plt.xlabel("Característica")
plt.ylabel("Tiempo (o Tarea)")
plt.text(10, 5, "Lasso")
plt.subplot(1, 2, 2)
plt.spy(coef_multi_task_lasso_)
plt.xlabel("Característica")
plt.ylabel("Tiempo (o Tarea)")
plt.text(10, 5, "MultiTaskLasso")
fig.suptitle("Ubicación no nula del coeficiente")

feature_to_plot = 0
plt.figure()
lw = 2
plt.plot(coef[:, feature_to_plot], color="seagreen", linewidth=lw, label="Verdad básica")
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()

Resumen

En este laboratorio, aprendimos cómo realizar la selección conjunta de características utilizando el algoritmo Lasso multitarea. Generamos algunos datos de muestra, ajustamos modelos a ellos utilizando Lasso y Lasso multitarea y graficamos los resultados. Podemos ver que el algoritmo Lasso multitarea es mejor capaz de seleccionar características relevantes en todas las tareas en comparación con el algoritmo Lasso.