Selección de modelo para la regresión Lasso

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, aprenderemos a seleccionar el mejor hiperparámetro alfa para los modelos de regresión Lasso. Se discutirán dos enfoques: (1) seleccionar el valor óptimo de alfa solo utilizando el conjunto de entrenamiento y algunos criterios de información, y (2) seleccionar el mejor hiperparámetro utilizando validación cruzada. Usaremos el conjunto de datos de diabetes en este ejemplo.

Consejos sobre la VM

Una vez que se haya iniciado 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 unos 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 sus 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"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/preprocessing("Preprocessing and Normalization") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/pipeline("Pipeline") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49192{{"Selección de modelo para la regresión Lasso"}} sklearn/preprocessing -.-> lab-49192{{"Selección de modelo para la regresión Lasso"}} sklearn/pipeline -.-> lab-49192{{"Selección de modelo para la regresión Lasso"}} sklearn/datasets -.-> lab-49192{{"Selección de modelo para la regresión Lasso"}} ml/sklearn -.-> lab-49192{{"Selección de modelo para la regresión Lasso"}} end

Conjunto de datos

Primero, cargaremos el conjunto de datos de diabetes utilizando la función load_diabetes de sklearn.datasets. El conjunto de datos consta de 10 variables de línea base, edad, sexo, índice de masa corporal, presión arterial media y seis mediciones de suero sanguíneo, y una medida cuantitativa de la progresión de la enfermedad un año después de la línea base.

from sklearn.datasets import load_diabetes

X, y = load_diabetes(return_X_y=True, as_frame=True)
X.head()

Agregar características aleatorias

Agregaremos algunas características aleatorias a los datos originales para ilustrar mejor la selección de características realizada por el modelo Lasso. Las características aleatorias se generarán utilizando la función RandomState de numpy.

import numpy as np
import pandas as pd

rng = np.random.RandomState(42)
n_random_features = 14
X_random = pd.DataFrame(
    rng.randn(X.shape[0], n_random_features),
    columns=[f"random_{i:02d}" for i in range(n_random_features)],
)
X = pd.concat([X, X_random], axis=1)
X[X.columns[::3]].head()

Seleccionando Lasso a través de un criterio de información

Usaremos la función LassoLarsIC de sklearn.linear_model para proporcionar un estimador de Lasso que utiliza el criterio de información de Akaike (AIC) o el criterio de información bayesiano (BIC) para seleccionar el valor óptimo del parámetro de regularización alfa. Primero ajustaremos un modelo Lasso con el criterio AIC.

import time
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LassoLarsIC
from sklearn.pipeline import make_pipeline

start_time = time.time()
lasso_lars_ic = make_pipeline(StandardScaler(), LassoLarsIC(criterion="aic")).fit(X, y)
fit_time = time.time() - start_time

Almacenar resultados y comprobar el alfa óptimo

Almacenaremos la métrica AIC para cada valor de alfa utilizado durante fit. Luego realizaremos el mismo análisis utilizando el criterio BIC. Finalmente, comprobaremos qué valor de alfa conduce al AIC y BIC mínimos.

results = pd.DataFrame(
    {
        "alphas": lasso_lars_ic[-1].alphas_,
        "AIC criterion": lasso_lars_ic[-1].criterion_,
    }
).set_index("alphas")
alpha_aic = lasso_lars_ic[-1].alpha_

lasso_lars_ic.set_params(lassolarsic__criterion="bic").fit(X, y)
results["BIC criterion"] = lasso_lars_ic[-1].criterion_
alpha_bic = lasso_lars_ic[-1].alpha_

def highlight_min(x):
    x_min = x.min()
    return ["font-weight: bold" if v == x_min else "" for v in x]

results.style.apply(highlight_min)

Graficando los valores de AIC y BIC

Finalmente, graficaremos los valores de AIC y BIC para los diferentes valores de alfa. Las líneas verticales en la gráfica corresponden al alfa elegido para cada criterio. El alfa seleccionado corresponde al mínimo del criterio AIC o BIC.

ax = results.plot()
ax.vlines(
    alpha_aic,
    results["AIC criterion"].min(),
    results["AIC criterion"].max(),
    label="alpha: AIC estimate",
    linestyles="--",
    color="tab:blue",
)
ax.vlines(
    alpha_bic,
    results["BIC criterion"].min(),
    results["BIC criterion"].max(),
    label="alpha: BIC estimate",
    linestyle="--",
    color="tab:orange",
)
ax.set_xlabel(r"$\alpha$")
ax.set_ylabel("criterion")
ax.set_xscale("log")
ax.legend()
_ = ax.set_title(
    f"Information-criterion for model selection (training time {fit_time:.2f}s)"
)

Seleccionando Lasso a través de la validación cruzada

Usaremos dos estimadores diferentes para seleccionar el mejor hiperparámetro alfa con validación cruzada integrada: LassoCV y LassoLarsCV. Para ambos algoritmos, usaremos una estrategia de validación cruzada de 20 pliegues.

Lasso a través de la descida por coordenadas

Realizaremos la optimización de hiperparámetros utilizando LassoCV.

from sklearn.linear_model import LassoCV

start_time = time.time()
model = make_pipeline(StandardScaler(), LassoCV(cv=20)).fit(X, y)
fit_time = time.time() - start_time

Lasso a través de la regresión de ángulo mínimo

Realizaremos la optimización de hiperparámetros utilizando LassoLarsCV.

from sklearn.linear_model import LassoLarsCV

start_time = time.time()
model = make_pipeline(StandardScaler(), LassoLarsCV(cv=20)).fit(X, y)
fit_time = time.time() - start_time

Resumen del enfoque de validación cruzada

Ambos algoritmos dan resultados aproximadamente iguales. Lars calcula una trayectoria de solución solo para cada inflexión en la trayectoria. Como resultado, es muy eficiente cuando hay pocos inflexiones, lo cual es el caso si hay pocos rasgos o muestras. Por el contrario, el descenso por coordenadas calcula los puntos de la trayectoria en una malla pre-especificada (aquí usamos el predeterminado). Por lo tanto, es más eficiente si el número de puntos de malla es menor que el número de inflexiones en la trayectoria. Esta estrategia puede ser interesante si el número de rasgos es realmente grande y hay suficientes muestras para ser seleccionadas en cada uno de los pliegues de validación cruzada. En términos de errores numéricos, para variables fuertemente correlacionadas, Lars acumulará más errores, mientras que el algoritmo de descenso por coordenadas solo tomará muestras de la trayectoria en una malla.

Resumen

En este laboratorio, aprendimos sobre la selección del mejor hiperparámetro alfa para los modelos de regresión Lasso. Discutimos dos enfoques: (1) la selección del valor óptimo de alfa solo utilizando el conjunto de entrenamiento y algunos criterios de información, y (2) la selección del mejor hiperparámetro utilizando validación cruzada. Utilizamos el conjunto de datos de diabetes en este ejemplo. Ambos enfoques pueden funcionar de manera similar, pero la selección de hiperparámetros dentro de la muestra muestra su eficacia en términos de rendimiento computacional. Sin embargo, solo se puede utilizar cuando el número de muestras es lo suficientemente grande en comparación con el número de características. La optimización de hiperparámetros a través de la validación cruzada es una estrategia segura que funciona en diferentes configuraciones.