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