¿Cómo combinar la interpolación de splines multivariables y la regresión en Python?
Objetivo: Mi objetivo es realizar una regresión en datos donde y = variable dependiente (debe permanecer constante) e X = variables independientes x1…x4). Quiero realizar una regresión de y sobre las variables x1…x4. Pero antes, quiero realizar una transformación de spline (cuadrática) de las variables x1…x4 y luego hacer una regresión de las variables transformadas por spline sobre y.
Datos de entrada: Mis datos están organizados en un dataframe de la siguiente manera:
y | x1 | x2 | x3 | x4 |
---|---|---|---|---|
1 | 3 | 4 | 5 | 6 |
2 | 7 | 8 | 9 | 10 |
2 | 11 | 12 | 13 | 14 |
Idea:
1. Utilizar scipy.interpolate.UnivariateSpline y realizar un ajuste de spline de suavizado de 1-D a los x1 hasta xn proporcionados.
2. Extraer los nuevos valores de x para los valores de y originales (es decir, x1nuevo…x4nuevo).
3. Regresar los nuevos valores de x x1nuevo…x4nuevo en los valores de y originales (en una nota aparte: con un enfoque de LASSO de grupo).
Problema: No puedo recuperar los valores ajustados de x1…x4 de UnivariateSpline. También examiné scipy.interpolate.griddata y scipy.ndimage.map_coordinates, pero no pude encontrar una forma de manipular estos paquetes para mi propósito.
¡Cualquier sugerencia al respecto es apreciada!
(+ Idealmente, quiero poder establecer un factor de suavizado para la interpolación de spline).
EDITAR: Creo que la funcionalidad requerida debería ser similar al paquete earth en R (ver https://cran.r-project.org/web/packages/earth/earth.pdf).
davy.ai
Como experto en TI especializado en Python, regresión, spline y suavizado, sugiero los siguientes pasos para lograr el objetivo deseado:
1.Importa las bibliotecas necesarias, como numpy, pandas y scipy.
2.Carga los datos en un dataframe de pandas.
3.Define un factor de suavizado para la interpolación spline usando el parámetro s.
4.Utiliza scipy.interpolate.UnivariateSpline para realizar un ajuste spline suavizado de 1-D a las variables x1 a xn. El código para este paso puede verse como:
5.Repite el paso anterior para las variables x restantes (x2 a xn).
6.Combina las variables x suavizadas en un nuevo dataframe junto con la variable y original.
7.Utiliza un algoritmo de regresión, como regresión lineal o logística, para realizar una regresión de las nuevas variables x suavizadas sobre la variable y original.
En cuanto al problema de recuperar las variables x ajustadas de UnivariateSpline, desafortunadamente, parece que UnivariateSpline no proporciona una forma de recuperar directamente los valores ajustados para las variables x de entrada. Sin embargo, el fragmento de código anterior muestra cómo generar nuevas variables x suavizadas utilizando la función spline ajustada que se pueden utilizar para el análisis de regresión.
Además, para realizar la regresión con un enfoque de grupo LASSO, puedes utilizar la biblioteca sklearn.linear_model, que proporciona una implementación de regresión Lasso. Puedes agrupar las características manualmente especificando los índices correspondientes para cada grupo, o puedes utilizar un paquete como group_lasso para automatizar este paso.