Líneas de regresión adaptativa multivariante…o… MARTEes un algoritmo para problemas complejos de regresión no lineal.
El algoritmo consiste en encontrar un conjunto de funciones lineales simples que en conjunto dan como resultado el mejor rendimiento predictivo. De esta manera, MARS es un tipo de conjunto de funciones lineales simples y puede lograr un buen desempeño en problemas de regresión difíciles con muchas variables de entrada y relaciones no lineales complejas.
En este tutorial, descubrirá cómo desarrollar modelos de Spline de Regresión Adaptativa Multivariante en Python.
Después de completar este tutorial, lo sabrás:
- El algoritmo MARS para problemas de modelación predictiva de regresión no lineal multivariada.
- Cómo usar el API de la tierra para desarrollar modelos MARS compatibles con scikit-learn.
- Cómo evaluar y hacer predicciones con los modelos MARS sobre los problemas de modelización de regresión.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en tres partes; son:
- Líneas de regresión adaptativa multivariante
- MARS Python API
- MARS trabajó el ejemplo de la regresión
Líneas de regresión adaptativa multivariante
Multivariate Adaptive Regression Splines, o MARS para abreviar, es un algoritmo diseñado para problemas de regresión no lineal multivariada.
Los problemas de regresión son aquellos en los que un modelo debe predecir un valor numérico. Multivariante significa que hay más de una (a menudo decenas) de variables de entrada, y no lineal significa que la relación entre las variables de entrada y la variable objetivo no es lineal, lo que significa que no puede describirse utilizando una línea recta (por ejemplo, es curva o doblada).
MARS es un procedimiento adaptativo para la regresión, y es muy adecuado para problemas de alta dimensión (es decir, un gran número de entradas). Puede ser visto como una generalización de la regresión lineal por pasos …
– Página 321, Los elementos del aprendizaje estadístico, 2016.
El algoritmo MARS consiste en descubrir un conjunto de funciones lineales simples y fragmentadas que caracterizan los datos y utilizarlas en conjunto para hacer una predicción. En cierto sentido, el modelo es un conjunto de funciones lineales.
Una función lineal a destajo es una función compuesta de funciones más pequeñas. En este caso, es una función que o bien produce 0 o bien el valor de entrada directamente.
A “función correcta«de una variable de entrada implica la selección de un valor específico para la variable y la salida de un 0 para todos los valores por debajo del valor y la salida del valor tal cual para todos los valores por encima del valor elegido.
- f(x) = x si x > valor, si no 0
O al revés, un «función de la izquierda» puede utilizarse cuando se emiten directamente valores menores que el valor elegido y valores mayores que el valor elegido emiten un cero.
- f(x) = x si x < valor, si no 0
Esto se llama función de bisagradonde el valor elegido o punto de separación es el «nudo» de la función. También se llama función lineal rectificada en las redes neuronales.
Las funciones también se denominan «splines…de ahí el nombre del algoritmo.
Cada función es lineal por partes, con un nudo en el valor t. En la terminología de […]…estas son ranuras lineales.
– Página 322, Los elementos del aprendizaje estadístico, 2016.
El algoritmo MARS genera muchas de estas funciones, llamadas funciones base para una o más variables de entrada.
A continuación se aprende un modelo de regresión lineal a partir de la salida de cada una de estas funciones base con la variable objetivo. Esto significa que la salida de cada función base se pondera con un coeficiente. Se hace una predicción sumando el resultado ponderado de todas las funciones base del modelo.
La clave del algoritmo MARS es cómo se eligen las funciones de base. Esto implica dos pasos: la fase de crecimiento o generación llamada la fase de avance y la fase de poda o refinamiento llamada la fase de retroceso.
- Etapa de Adelante: Generar funciones de base de candidatos para el modelo.
- Etapa de retroceso: Borrar las funciones básicas del modelo.
La etapa de avance implica generar funciones de base y añadirlas al modelo. Al igual que un árbol de decisión, cada valor de cada variable de entrada en el conjunto de datos de formación se considera como candidato a una función base.
¿Cómo se determinó el punto de corte? Cada punto de datos de cada predictor se evalúa como un punto de corte candidato mediante la creación de un modelo de regresión lineal con las características candidatas, y se calcula el error de modelo correspondiente.
– Página 146, Applied Predictive Modeling, 2013.
Las funciones siempre se añaden por parejas, para la versión izquierda y derecha de la función lineal a destajo del mismo punto de división. Un par de funciones generadas sólo se añade al modelo si reduce el error del modelo global.
La etapa de retroceso implica la selección de funciones a eliminar del modelo, una a una. Una función sólo se elimina del modelo si no tiene ningún impacto en el rendimiento (neutral) o un aumento en el rendimiento predictivo.
Una vez que se ha creado el conjunto completo de características, el algoritmo elimina secuencialmente las características individuales que no contribuyen significativamente a la ecuación del modelo. Este procedimiento de «poda» evalúa cada variable predictiva y estima cuánto se redujo la tasa de error al incluirla en el modelo.
– Página 148, Applied Predictive Modeling, 2013.
El cambio en el rendimiento del modelo en la etapa posterior se evalúa mediante la validación cruzada del conjunto de datos de capacitación, denominada validación cruzada generalizada o GCV para abreviar. De este modo, se puede estimar el efecto de cada modelo lineal parcial en el rendimiento del modelo.
El número de funciones utilizadas por el modelo se determina automáticamente, ya que el proceso de poda se detendrá cuando no se puedan hacer más mejoras.
Los únicos dos hiperparámetros clave a considerar son el número total de funciones candidatas a generar, a menudo fijado en un número muy grande, y el grado de las funciones a generar.
… hay dos parámetros de ajuste asociados al modelo MARS: el grado de las características que se añaden al modelo y el número de términos retenidos. Este último parámetro puede determinarse automáticamente utilizando el procedimiento de poda por defecto (utilizando el GCV), establecido por el usuario o determinado mediante una técnica de remuestreo externo.
– Página 149, Applied Predictive Modeling, 2013.
El grado es el número de variables de entrada consideradas por cada función lineal de la pieza. Por defecto, se fija en uno, pero puede fijarse en valores mayores para permitir que el modelo capte las interacciones complejas entre las variables de entrada. El grado se suele mantener pequeño para limitar la complejidad computacional del modelo (memoria y tiempo de ejecución).
Una ventaja del algoritmo MARS es que sólo utiliza variables de entrada que elevan el rendimiento del modelo. Al igual que los algoritmos de ensamblaje de bosques aleatorios y de embolsado, MARS logra un tipo de selección automática de características.
… el modelo realiza automáticamente la selección de características; la ecuación del modelo es independiente de las variables predictoras que no están involucradas con ninguna de las características finales del modelo. Este punto no puede ser subestimado.
– Página 149, Applied Predictive Modeling, 2013.
Ahora que estamos familiarizados con el algoritmo MARS, veamos cómo podríamos desarrollar modelos MARS en Python.
MARS Python API
El algoritmo MARS no se proporciona en la biblioteca de aprendizaje de ciencias; en su lugar, se debe utilizar una biblioteca de terceros.
MARS es proporcionado por la biblioteca de Python py-earthon.
“Tierra» es un juego de «Marte” (el planeta) y también es el nombre del paquete en R que proporciona el algoritmo MARS.
El paquete Python py-earthon es una implementación Python de MARS llamada así por la versión R y proporciona una completa comparabilidad con la biblioteca de aprendizaje de máquinas scikit-learn.
El primer paso es instalar la biblioteca de py-tierra. Recomiendo usar el administrador de paquetes py-tierra, usando el siguiente comando desde la línea de comandos:
sudo pip instalar sklearn–contribuya–py–Tierra |
Una vez instalado, podemos cargar la biblioteca e imprimir la versión en un script Python para confirmar que se instaló correctamente.
# Verificar la versión del año… importación pyearth # Versión de la pantalla imprimir(pyearth.La versión…) |
Ejecutando el guión se cargará la biblioteca py-tierra e imprimirá el número de versión de la biblioteca.
Su número de versión debería ser el mismo o más alto.
Un modelo MARS puede ser creado con hiperparámetros de modelo por defecto creando una instancia de la clase de la Tierra.
... # Definir el modelo modelo = Tierra() |
Una vez creado, el modelo se puede ajustar directamente a los datos de entrenamiento.
... # Encajar el modelo en el conjunto de datos de entrenamiento modelo.encajar(X, y) |
Por defecto, probablemente no es necesario configurar ninguno de los hiperparámetros del algoritmo.
El algoritmo descubre automáticamente el número y el tipo de funciones básicas a utilizar.
El número máximo de funciones de base se configura con el «max_terms«y se fija en un gran número proporcional al número de variables de entrada y se limita a un máximo de 400.
El grado de las funciones lineales parciales, es decir, el número de variables de entrada consideradas en cada función básica, está controlado por el «grado_máximo«y por defecto a 1.
Una vez ajustado, el modelo puede ser usado para hacer una predicción sobre nuevos datos.
... Xnew = ... # hacer una predicción yhat = modelo.predecir(Xnew) |
Se puede crear un resumen del modelo de ajuste llamando al resumen() función.
... # Imprime un resumen del modelo de ajuste imprimir(modelo.resumen()) |
En el resumen se presenta una lista de las funciones básicas utilizadas en el modelo y los resultados estimados del modelo, calculados mediante validación cruzada generalizada (VGC) en el conjunto de datos de capacitación.
A continuación se presenta un ejemplo de un resultado resumido en el que se puede ver que el modelo tiene 19 funciones básicas y una estimación de EME de unas 25.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Modelo de la Tierra ————————————– Función de base Coeficiente de poda ————————————– (Intercepción) No 313.89 h(x4-1.88408) No 98.0124 h(1.88408-x4) No -99.2544 h(x17-1.82851) No 99.7349 h(1.82851-x17) No -99.9265 x14 No 96.7872 x15 No 85.4874 h(x6-1.10441) No 76.4345 h(1.10441-x6) No -76.5954 x9 No 76.5097 h(x3+2.41424) No 73.9003 h(-2.41424-x3) No -73.2001 x0 No 71.7429 x2 No 71.297 x19 No 67.6034 h(x11-0.575217) No 66.0381 h(0.575217-x11) No -65.9314 x18 No 62.1124 x12 No 38.8801 ————————————– MSE: 25.5896, GCV: 25.8266, RSQ: 0.9997, GRSQ: 0.9997 |
Ahora que estamos familiarizados con el desarrollo de modelos MARS con el API de py-tierra, veamos un ejemplo trabajado.
MARS trabajó el ejemplo de la regresión
En esta sección, veremos un ejemplo de evaluación y uso de un modelo MARS para un problema de modelación predictiva de regresión.
Primero, debemos definir un conjunto de datos de regresión.
Utilizaremos la función make_regression() para crear un problema de regresión sintética con 20 características (columnas) y 10.000 ejemplos (filas). El siguiente ejemplo crea y resume la forma del conjunto de datos sintéticos.
# Definir un conjunto de datos de regresión sintética de sklearn.conjuntos de datos importación hacer_regresión # Definir el conjunto de datos X, y = make_regression(n_muestras=10000, n_funciones=20, n_informativo=15, ruido=0.5, estado_aleatorio=7) # resumir el conjunto de datos imprimir(X.forma, y.forma) |
Ejecutando el ejemplo se crea el conjunto de datos y se resume el número de filas y columnas, que coinciden con nuestras expectativas.
A continuación, podemos evaluar un modelo MARS en el conjunto de datos.
Definiremos el modelo usando los hiperparámetros por defecto.
... # Definir el modelo modelo = Tierra() |
Evaluaremos el modelo utilizando la validación cruzada repetida de pliegues k, que es una buena práctica para evaluar los modelos de regresión en general.
En este caso, usaremos tres repeticiones y 10 pliegues.
... # Definir el procedimiento de evaluación cv = RepetidoKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) |
Evaluaremos el rendimiento del modelo usando el error medio absoluto, o MAE para abreviar.
El API de scikit-learn hará que la puntuación MAE sea negativa para que pueda ser maximizada, lo que significa que las puntuaciones irán desde el infinito negativo (peor) hasta el 0 (mejor).
... # Evaluar el modelo y recoger los resultados n_puntuaciones = puntaje_valor_cruzado(modelo, X, y, puntuación=‘neg_mean_absolute_error’, cv=cv, n_jobs=–1) |
Por último, informaremos del rendimiento del modelo como la media de la puntuación MAE en todas las repeticiones y pliegues de validación cruzada.
... # Informe de rendimiento imprimir(MAE: %.3f (%.3f)’. % (significa(n_puntuaciones), std(n_puntuaciones))) |
Enlazando todo esto, el ejemplo completo de la evaluación de un modelo MARS en un conjunto de datos de regresión se enumera a continuación.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Evaluar las ranuras de regresión adaptativa multivariada para la regresión de numpy importación significa de numpy importación std de sklearn.conjuntos de datos importación make_regression de sklearn.model_selection importación puntaje_valor_cruzado de sklearn.model_selection importación RepetidoKFold de pyearth importación Tierra # Definir el conjunto de datos X, y = make_regression(n_muestras=10000, n_funciones=20, n_informativo=15, ruido=0.5, estado_aleatorio=7) # Definir el modelo modelo = Tierra() # Definir el procedimiento de evaluación cv = RepetidoKFold(n_splits=10, n_repeticiones=3, estado_aleatorio=1) # Evaluar el modelo y recoger los resultados n_puntuaciones = puntaje_valor_cruzado(modelo, X, y, puntuación=‘neg_mean_absolute_error’, cv=cv, n_jobs=–1) # Informe de rendimiento imprimir(MAE: %.3f (%.3f)’. % (significa(n_puntuaciones), std(n_puntuaciones))) |
Ejecutando el ejemplo se evalúa el rendimiento del modelo MARS y se informa de la media y la desviación estándar de la puntuación MAE.
Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.
En este caso, podemos ver que el algoritmo MARS alcanzó un MAE medio de alrededor de 4.0 (ignorando el signo) en el conjunto de datos de regresión sintética.
Puede que queramos usar MARS como nuestro modelo final y usarlo para hacer predicciones sobre nuevos datos.
Esto requiere primero definir y ajustar el modelo en todos los datos disponibles.
... # Definir el modelo modelo = Tierra() # Encajar el modelo en todo el conjunto de datos modelo.encajar(X, y) |
Entonces podemos llamar al predecir() y pasar los nuevos datos de entrada para hacer predicciones.
... # hacer una predicción para una sola fila de datos yhat = modelo.predecir([[fila]) |
El ejemplo completo de ajuste de un modelo final de MARS y la realización de una predicción en una sola fila de nuevos datos se enumera a continuación.
# Hacer una predicción con splines de regresión adaptativa multivariante para la regresión de sklearn.conjuntos de datos importación make_regression de pyearth importación Tierra # Definir el conjunto de datos X, y = make_regression(n_muestras=10000, n_funciones=20, n_informativo=15, ruido=0.5, estado_aleatorio=7) # Definir el modelo modelo = Tierra() # Encajar el modelo en todo el conjunto de datos modelo.encajar(X, y) # definir una sola fila de datos fila = [[–0.6305395, –0.1381388, –1.23954844, 0.32992515, –0.36612979, 0.74962718, 0.21532504, 0.90983424, –0.60309177, –1.46455027, –0.06788126, –0.30329357, –0.60350541, 0.7369983, 0.21774321, –1.2365456, 0.69159078, –0.16074843, –1.39313206, 1.16044301] # hacer una predicción para una sola fila de datos yhat = modelo.predecir([[fila]) # resumir la predicción imprimir(«Predicción: %d % yhat[[0]) |
Ejecutando el ejemplo se ajusta el modelo MARS en todos los datos disponibles, luego hace una sola predicción de regresión.
Más lecturas
Esta sección proporciona más recursos sobre el tema si desea profundizar en él.
Documentos
Libros
APIs
Artículos
Resumen
En este tutorial, descubriste cómo desarrollar modelos de Spline de Regresión Adaptativa Multivariable en Python.
Específicamente, aprendiste:
- El algoritmo MARS para problemas de modelación predictiva de regresión no lineal multivariada.
- Cómo usar el API de la tierra para desarrollar modelos MARS compatibles con scikit-learn.
- Cómo evaluar y hacer predicciones con los modelos MARS sobre los problemas de modelización de regresión.
¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.