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 implica añadir penalizaciones a la función de pérdida durante el entrenamiento que fomentan 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.
La regresión del lazo es un tipo popular de regresión lineal regularizada que incluye una penalización de L1. Esto tiene el efecto de reducir los coeficientes para aquellas variables de entrada que no contribuyen mucho a la tarea de predicción.
Regresión del ángulo mínimo o LARS para abreviar, proporciona una forma alternativa y eficiente de ajustar un modelo de regresión regularizada de Lasso que no requiere ningún hiperparámetro.
En este tutorial, descubrirá cómo desarrollar y evaluar los modelos de Regresión LARS en Python.
Después de completar este tutorial, lo sabrás:
- La Regresión LARS proporciona una forma alternativa de entrenar un modelo de regresión lineal regularizada de Lasso que añade una penalización a la función de pérdida durante el entrenamiento.
- Cómo evaluar un modelo de regresión de LARS y usar un modelo final para hacer predicciones para nuevos datos.
- Cómo configurar el modelo de Regresión LARS para un nuevo conjunto de datos automáticamente usando una versión de validación cruzada del estimador.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en tres partes; son:
- Regresión de LARS
- Ejemplo de regresión de LARS
- Sintonización de los hiperparámetros LARS
Regresión de LARS
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 método 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 denomina Operador de Selección y Encogimiento Mínimo Absoluto (LASSO), o más comúnmente, «Lazo” (con el caso del título) para abreviar.
El Lasso entrena al modelo usando un procedimiento de entrenamiento de pérdida de mínimos cuadrados.
Regresión del ángulo mínimoLAR o LARS para abreviar, es un enfoque alternativo para resolver el problema de optimización de la adaptación del modelo penalizado. Técnicamente, LARS es una versión avanzada de la selección de características para la regresión que puede ser adaptada para el modelo de Lasso.
A diferencia del Lazo, no requiere un hiperparámetro que controle la ponderación de la pena en la función de pérdida. En su lugar, la ponderación es descubierta automáticamente por el LARS.
…la regresión del ángulo mínimo (LARS), es un marco amplio que abarca el lazo y modelos similares. El modelo LARS puede ser usado para ajustar los modelos de lazo más eficientemente, especialmente en problemas de alta dimensión.
– Página 126, Applied Predictive Modeling, 2013.
Ahora que estamos familiarizados con la regresión penalizada de LARS, veamos un ejemplo trabajado.
Ejemplo de regresión de LARS
En esta sección, demostraremos cómo usar el algoritmo de regresión de LARS.
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.
# Cargar y resumir el conjunto de datos de la vivienda de pandas importación read_csv de matplotlib importación pyplot # Cargar conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) # Resumir la forma imprimir(dataframe.forma) # Resumir las primeras líneas imprimir(dataframe.cabeza()) |
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.
(506, 14) 0 1 2 3 4 5 … 8 9 10 11 12 13 0 0.00632 18.0 2.31 0 0.538 6.575 … 1 296.0 15.3 396.90 4.98 24.0 1 0.02731 0.0 7.07 0 0.469 6.421 … 2 242.0 17.8 396.90 9.14 21.6 2 0.02729 0.0 7.07 0 0.469 7.185 … 2 242.0 17.8 392.83 4.03 34.7 3 0.03237 0.0 2.18 0 0.458 6.998 … 3 222.0 18.7 394.63 2.94 33.4 4 0.06905 0.0 2.18 0 0.458 7.147 … 3 222.0 18.7 396.90 5.33 36.2 [5 rows x 14 columns] |
La biblioteca de aprendizaje de la máquina Python de scikit-learn proporciona una implementación del algoritmo de regresión penalizada LARS a través de la clase de Lars.
... # Definir el modelo modelo = Lars() |
Podemos evaluar el modelo de Regresión LARS 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Evaluar un modelo de regresión de Lars en el conjunto de datos # de numpy importación significa de numpy importación std de numpy importación absoluto de pandas importación read_csv de sklearn.model_selection importación puntaje_valor_cruzado de sklearn.model_selection importación RepetidoKFold de sklearn.modelo_lineal importación Lars # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] # Definir el modelo modelo = Lars() # Definir el método de evaluación del modelo cv = RepetidoKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) # Evaluar el modelo resultados = puntaje_valor_cruzado(modelo, X, y, puntuación=‘neg_mean_absolute_error’, cv=cv, n_jobs=–1) # forzar las puntuaciones a ser positivas resultados = absoluto(resultados) imprimir(«Promedio MAE: %.3f (%.3f) % (significa(resultados), std(resultados))) |
La ejecución del ejemplo evalúa el algoritmo de Regresión LARS 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.432.
Podemos decidir usar la Regresión LARS 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Hacer una predicción con un modelo de regresión de Lars en el conjunto de datos # de pandas importación read_csv de sklearn.modelo_lineal importación Lars # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] # Definir el modelo modelo = Lars() # Modelo de ajuste modelo.encajar(X, y) # Definir nuevos datos fila = [[0.00632,18.00,2.310,0,0.5380,6.5750,65.20,4.0900,1,296.0,15.30,396.90,4.98] # hacer una predicción yhat = modelo.predecir([[fila]) # resumir la predicción imprimir(«Predicho: %.3f % yhat) |
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.
Sintonización de los hiperparámetros LARS
Como parte del algoritmo de entrenamiento LARS, descubre automáticamente el mejor valor para el hiperparámetro lambda utilizado en el algoritmo Lasso.
Este hiperparámetro es conocido como el «alfa«en la aplicación de la ciencia y la tecnología de Lasso y LARS.
Sin embargo, el proceso de descubrir automáticamente el mejor modelo y alfa El hiperparámetro sigue basándose en un único conjunto de datos de entrenamiento.
Un enfoque alternativo es ajustar el modelo en múltiples subconjuntos del conjunto de datos de entrenamiento y elegir la mejor configuración interna del modelo en todos los pliegues, en este caso, el valor de alfa. Generalmente, esto se conoce como un estimador de validación cruzada.
Las bibliotecas de aprendizaje científico ofrecen una versión de validación cruzada del LARS para encontrar un valor más robusto para alfa a través de la clase de LarsCV.
El ejemplo que figura a continuación demuestra cómo se ajusta un LarsCV modelo e informe de la alfa valor encontrado a través de la validación cruzada
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Usar el algoritmo de regresión de Lars configurado automáticamente de numpy importación arange de pandas importación read_csv de sklearn.modelo_lineal importación LarsCV de sklearn.model_selection importación RepetidoKFold # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] # Definir el método de evaluación del modelo cv = RepetidoKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) # Definir el modelo modelo = LarsCV(cv=cv, n_jobs=–1) # Modelo de ajuste modelo.encajar(X, y) # resumir la configuración elegida imprimir(«alfa: %f % modelo.alfa_) |
Ejecutar el ejemplo encaja con el LarsCV que utiliza la validación cruzada repetida e informa de una óptima alfa valor encontrado a través de las pistas.
Esta versión del modelo LARS puede resultar más robusta en la práctica.
Podemos evaluarlo utilizando el mismo procedimiento que hicimos en la sección anterior, aunque en este caso, cada ajuste del modelo se basa en los hiperparámetros encontrados a través de la validación cruzada repetida internamente (por ejemplo, la validación cruzada de un estimador de validación cruzada).
El ejemplo completo figura a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Evaluar un modelo de regresión de validación cruzada de Lars en el conjunto de datos # de numpy importación significa de numpy importación std de numpy importación absoluto de pandas importación read_csv de sklearn.model_selection importación puntaje_valor_cruzado de sklearn.model_selection importación RepetidoKFold de sklearn.modelo_lineal importación LarsCV # Cargar el conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] # Definir el método de evaluación del modelo cv = RepetidoKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) # Definir el modelo modelo = LarsCV(cv=cv, n_jobs=–1) # Evaluar el modelo resultados = puntaje_valor_cruzado(modelo, X, y, puntuación=‘neg_mean_absolute_error’, cv=cv, n_jobs=–1) # forzar las puntuaciones a ser positivas resultados = absoluto(resultados) imprimir(«Promedio MAE: %.3f (%.3f) % (significa(resultados), std(resultados))) |
Al ejecutar el ejemplo se evaluará la estimación cruzada de los hiperparámetros del modelo utilizando la 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.
En este caso, podemos ver que conseguimos resultados ligeramente mejores con 3.374 frente a 3.432 en la sección anterior.
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 LARS en Python.
Específicamente, aprendiste:
- La Regresión LARS proporciona una forma alternativa de entrenar un modelo de regresión lineal regularizada de Lasso que añade una penalización a la función de pérdida durante el entrenamiento.
- Cómo evaluar un modelo de regresión de LARS y usar un modelo final para hacer predicciones para nuevos datos.
- Cómo configurar el modelo de Regresión LARS para un nuevo conjunto de datos automáticamente usando una versión de validación cruzada del estimador.
¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.