es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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).

Tags:  , , ,

Answer

  1. Avatar for 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:

    x1_new = np.linspace(df['x1'].min(), df['x1'].max(), 1000)
    spline_x1 = scipy.interpolate.UnivariateSpline(df['x1'], df['y'], s=s)
    x1_smooth = spline_x1(x1_new)
    

    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.

Comments are closed.