Saltar al contenido

Cómo desarrollar modelos de regresión de LASSO en Python

12 de octubre de 2020

La regresión es una tarea de modelización que implica la predicción de un valor numérico dado una entrada.

La regresión lineal es el algoritmo estándar para la regresión que asume una relación lineal entre las entradas y la variable objetivo. Una extensión de la regresión lineal invoca la adición de penalizaciones a la función de pérdida durante el entrenamiento que fomenta modelos más simples que tienen valores de coeficientes más pequeños. Estas extensiones se denominan regresión lineal regularizada o regresión lineal penalizada.

Regresión del lazo es un tipo popular de regresión lineal regularizada que incluye una penalización L1. Esto tiene el efecto de reducir los coeficientes para aquellas variables de entrada que no contribuyen mucho a la tarea de predicción. Esta penalización permite que algunos valores de los coeficientes pasen al valor de cero, lo que permite que las variables de entrada se eliminen efectivamente del modelo, proporcionando un tipo de selección automática de características.

En este tutorial, descubrirá cómo desarrollar y evaluar los modelos de Regresión de Lazo en Python.

Después de completar este tutorial, lo sabrás:

  • La regresión del lazo es una extensión de la regresión lineal que añade una penalización de regularización a la función de pérdida durante el entrenamiento.
  • Cómo evaluar un modelo de Regresión de Lazo y usar un modelo final para hacer predicciones para nuevos datos.
  • Cómo configurar el modelo de Regresión del Lazo para un nuevo conjunto de datos mediante la búsqueda en la red y de forma automática.

Empecemos.

Cómo desarrollar modelos de regresión de LASSO en Python

Cómo desarrollar modelos de regresión de LASSO en Python
Foto de Phil Dolby, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en tres partes; son:

  1. Regresión del lazo
  2. Ejemplo de regresión del lazo
  3. Sintonizar los hiperparámetros del lazo

Regresión del lazo

La regresión lineal se refiere a un modelo que asume una relación lineal entre las variables de entrada y la variable objetivo.

Con una sola variable de entrada, esta relación es una línea, y con dimensiones más altas, esta relación puede ser pensada como un hiperplano que conecta las variables de entrada con la variable objetivo. Los coeficientes del modelo se encuentran a través de un proceso de optimización que busca minimizar el error de suma al cuadrado entre las predicciones (yhat) y los valores objetivo esperados (y).

  • pérdida = suma i=0 a n (y_i – yhat_i)^2

Un problema con la regresión lineal es que los coeficientes estimados del modelo pueden llegar a ser grandes, lo que hace que el modelo sea sensible a las entradas y posiblemente inestable. Esto es particularmente cierto para los problemas con pocas observaciones (muestras) o más muestras (n) que los predictores de entrada (p) o variables (las llamadas p >> n problemas).

Un enfoque para abordar la estabilidad de los modelos de regresión es cambiar la función de pérdida para incluir los costos adicionales de un modelo que tiene grandes coeficientes. Los modelos de regresión lineal que utilizan estas funciones de pérdida modificadas durante la formación se denominan colectivamente regresión lineal penalizada.

Una penalización popular es penalizar un modelo basado en la suma de los valores de los coeficientes absolutos. Esto se llama la penalización L1. Una penalización L1 minimiza el tamaño de todos los coeficientes y permite que algunos coeficientes se minimicen hasta el valor cero, lo que elimina el predictor del modelo.

  • l1_penalty = suma j=0 a p abs(beta_j)

Una penalización L1 minimiza el tamaño de todos los coeficientes y permite que cualquier coeficiente llegue al valor de cero, eliminando efectivamente las características de entrada del modelo.

Esto actúa como un tipo de selección automática de características.

… una consecuencia de penalizar los valores absolutos es que algunos parámetros están en realidad puestos a 0 para algún valor de lambda. Así, el lazo produce modelos que utilizan simultáneamente la regularización para mejorar el modelo y para llevar a cabo la selección de características.

– Página 125, Applied Predictive Modeling, 2013.

Esta penalización puede ser añadida a la función de coste para la regresión lineal y se conoce como la Regularización del Operador de Selección y Encogimiento Mínimo Absoluto (LASSO), o más comúnmente, «Lazo” (con el caso del título) para abreviar.

Una alternativa popular a la regresión de la cresta es el modelo de operador de encogimiento y selección menos absoluto, frecuentemente llamado lazo.

– Página 124, Applied Predictive Modeling, 2013.

Se utiliza un hiperparámetro llamado «lambda«que controla la ponderación de la pena a la función de pérdida. Un valor por defecto de 1.0 dará una ponderación completa a la penalización; un valor de 0 excluye la penalización. Los valores muy pequeños de lambdacomo 1e-3 o más pequeño, son comunes.

  • lazo_pérdida = pérdida + (lambda * l1_penalidad)

Ahora que estamos familiarizados con la regresión penalizada por el lazo, veamos un ejemplo trabajado.

Recomendado:  El potente análisis de datos de IA y el aprendizaje automático de NetraMark para impulsar la aplicación Nuro

Ejemplo de regresión del lazo

En esta sección, demostraremos cómo usar el algoritmo de Regresión de Lazo.

Primero, introduzcamos un conjunto de datos de regresión estándar. Usaremos el conjunto de datos de la vivienda.

El conjunto de datos de la carcasa es un conjunto de datos estándar de aprendizaje de la máquina que comprende 506 filas de datos con 13 variables numéricas de entrada y una variable numérica de destino.

Utilizando un arnés de pruebas de validación cruzada estratificada 10 veces con tres repeticiones, un modelo ingenuo puede lograr un error medio absoluto (MAE) de alrededor de 6,6. Un modelo de alto rendimiento puede lograr un MAE en este mismo arnés de prueba de alrededor de 1,9. Esto proporciona los límites del rendimiento esperado en este conjunto de datos.

El conjunto de datos implica la predicción del precio de la casa, dados los detalles del suburbio de la casa en la ciudad americana de Boston.

No es necesario descargar el conjunto de datos; lo descargaremos automáticamente como parte de nuestros ejemplos de trabajo.

El siguiente ejemplo descarga y carga el conjunto de datos como un Pandas DataFrame y resume la forma del conjunto de datos y las cinco primeras filas de datos.

La ejecución del ejemplo confirma las 506 filas de datos y 13 variables de entrada y una única variable objetivo numérica (14 en total). También podemos ver que todas las variables de entrada son numéricas.

La biblioteca de aprendizaje de la máquina Python de scikit-learn proporciona una implementación del algoritmo de regresión penalizada de Lasso a través de la clase de Lasso.

Confusamente, el lambda puede ser configurado a través de la «alfa«argumento» al definir la clase. El valor por defecto es 1.0 o una penalización completa.

Podemos evaluar el modelo de Regresión de Lazo en el conjunto de datos de la vivienda utilizando una validación cruzada repetida 10 veces y reportar el error absoluto medio (MAE) en el conjunto de datos.

Recomendado:  Cómo calcular la compensación de la desviación con la pitón

La ejecución del ejemplo evalúa el algoritmo de Regresión de Lazo en el conjunto de datos de la vivienda y reporta el promedio de MAE a través de las tres repeticiones de validación cruzada de 10 veces.

Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje. Considere ejecutar el ejemplo unas cuantas veces.

En este caso, podemos ver que el modelo alcanzó un MAE de alrededor de 3.711.

Podemos decidir usar la Regresión del Lazo como nuestro modelo final y hacer predicciones sobre nuevos datos.

Esto puede lograrse ajustando el modelo a todos los datos disponibles y llamando al predecir() pasando en una nueva fila de datos.

Podemos demostrarlo con un ejemplo completo, que se enumera a continuación.

Ejecutando el ejemplo se ajusta al modelo y hace una predicción para las nuevas filas de datos.

Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje. Intente ejecutar el ejemplo unas cuantas veces.

A continuación, podemos ver la configuración de los hiperparámetros del modelo.

Sintonizar los hiperparámetros del lazo

¿Cómo sabemos que el hiperparámetro por defecto de alfa=1.0 es apropiado para nuestro conjunto de datos?

No lo hacemos.

En su lugar, es una buena práctica probar un conjunto de diferentes configuraciones y descubrir qué es lo que mejor funciona para nuestro conjunto de datos.

Un enfoque sería la búsqueda de la cima… alfa valores de quizás 1e-5 a 100 en una escala log-10 y descubrir qué es lo que mejor funciona para un conjunto de datos. Otro enfoque sería probar valores entre 0,0 y 1,0 con una separación de cuadrícula de 0,01. Intentaremos lo último en este caso.

El siguiente ejemplo lo demuestra utilizando la clase GridSearchCV con una cuadrícula de valores que hemos definido.

Recomendado:  Maryland hoy | MPower Universities, socios anuncian nueva salud ...

Al ejecutar el ejemplo se evaluará cada combinación de configuraciones utilizando una validación cruzada repetida.

Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje. Intente ejecutar el ejemplo unas cuantas veces.

Podrías ver algunas advertencias que pueden ser ignoradas con seguridad, tales como:

En este caso, podemos ver que conseguimos resultados ligeramente mejores que los 3.379 vs. 3.711 del predeterminado. Ignore el signo; la biblioteca hace que el MAE sea negativo para fines de optimización.

Podemos ver que el modelo asignó un alfa peso de 0,01 a la pena.

La biblioteca scikit-learn también proporciona una versión incorporada del algoritmo que encuentra automáticamente buenos hiperparámetros a través de la clase LassoCV.

Para utilizar la clase, el modelo se ajusta en el conjunto de datos de entrenamiento como de costumbre y los hiperparámetros se ajustan automáticamente durante el proceso de entrenamiento. El modelo de ajuste puede entonces ser usado para hacer una predicción.

Por defecto, el modelo probará 100 alfa valores. Podemos cambiar esto a una cuadrícula de valores entre 0 y 1 con una separación de 0,01 como hicimos en el ejemplo anterior, estableciendo el «alphas«argumento».

El siguiente ejemplo lo demuestra.

Ejecutando el ejemplo se ajusta al modelo y descubre los hiperparámetros que dan los mejores resultados usando la validación cruzada.

Sus resultados específicos pueden variar dada la naturaleza estocástica del algoritmo de aprendizaje. Intente ejecutar el ejemplo unas cuantas veces.

En este caso, podemos ver que el modelo eligió el hiperparámetro de alfa=0,0. Esto es diferente de lo que encontramos a través de nuestra búsqueda manual de la cuadrícula, quizás debido a la forma sistemática en que se buscaron o seleccionaron las configuraciones.

Más lecturas

Esta sección proporciona más recursos sobre el tema si desea profundizar en él.

Libros

APIs

Artículos

Resumen

En este tutorial, descubriste cómo desarrollar y evaluar los modelos de Regresión de Lazo en Python.

Específicamente, aprendiste:

  • La regresión del lazo es una extensión de la regresión lineal que añade una penalización de regularización a la función de pérdida durante el entrenamiento.
  • Cómo evaluar un modelo de Regresión de Lazo y usar un modelo final para hacer predicciones para nuevos datos.
  • Cómo configurar el modelo de Regresión del Lazo para un nuevo conjunto de datos mediante la búsqueda en la red y de forma automática.

¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.

Descubre el aprendizaje rápido de la máquina en Python!

Aprendizaje de la máquina maestra con Python

Desarrolle sus propios modelos en minutos

…con sólo unas pocas líneas de código de aprendizaje científico…

Aprende cómo en mi nuevo Ebook:
Dominio de la máquina de aprendizaje con la pitón

Cubre Tutoriales de auto-estudio y proyectos integrales como:
Cargando datos, visualización, modelado, tuningy mucho más…

Finalmente traer el aprendizaje automático a
Sus propios proyectos

Sáltese los académicos. Sólo los resultados.

Ver lo que hay dentro