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.

La regresión polinómica predice una línea recta.

Quiero hacer una regresión polinómica (tercer grado), pero solo obtengo líneas rectas si uso menos de cuarto grado. No tengo experiencia en análisis de datos y básicamente solo copié el código de algún lugar y le di mis datos. Mis datos y están estandarizados y los valores x son simplemente los años desde 1950-2018.

Los problemas comienzan con el valor x, si uso los años, no funciona en absoluto, simplemente pronosticará una línea recta sin importar el grado que elija. Pero si uso el índice para ajustar el modelo, al menos funciona para el grado 4 y superior.

Pero solo quiero probar el grado 2 y 3.

Mi código:

x = np.array(list(range(1, 70)))
y = np.array([-1.07312323, -1.12360264, -1.16848888, -1.21237286, -1.24931163,
-1.24563078, -1.25029589, -1.25804974, -1.26992981, -1.2759396 ,
-1.31707672, -1.28845207, -1.2553561 , -1.21670196, -1.17405228,
-1.13823657, -1.10201293, -1.0652651 , -1.01830663, -0.95872599,
-0.86864519, -0.77287454, -0.67380868, -0.56936508, -0.47234488,
-0.38025164, -0.28073984, -0.17953134, -0.08026437, 0.01376177,
0.09177617, 0.15270399, 0.2005737 , 0.23841612, 0.2860362 ,
0.34606907, 0.39385415, 0.44154466, 0.49050035, 0.5338063 ,
0.58003198, 0.61416929, 0.59416923, 0.56887929, 0.53366038,
0.4907952 , 0.45338928, 0.40975728, 0.35098762, 0.29307093,
0.24168722, 0.21576624, 0.25267974, 0.3066606 , 0.37672389,
0.45321951, 0.53410345, 0.62491894, 0.72720349, 0.81841313,
0.9213128 , 1.03645707, 1.15479503, 1.25998302, 1.35221566,
1.44653627, 1.52833712, 1.60458778, 1.68225894])

transformando los datos para incluir otro eje

x = x[:, np.newaxis]
y = y[:, np.newaxis]

polynomial_features= PolynomialFeatures(degree=4)
x_poly = polynomial_features.fit_transform(x)

model = LinearRegression()
model.fit(x_poly, y)
y_poly_pred = model.predict(x_poly)

plt.scatter(x, y, s=10)
plt.plot(x, y_poly_pred, color=’m’)
plt.show()

La grafica resultante para el codigo con grado 4:

[Imágen correspondiente al grado 4]

Esto es lo que parece si voy con un grado de 3 o menos:

[Imágen correspondiente al grado 3]

¿Mis datos están en el formato equivocado o el código no está funcionando? Intenté varios fragmentos de código diferentes y tuve problemas similares. ¿O simplemente no tengo idea de la regresión polinómica y me falta algo importante?

Por cierto, no me importa si la regresión polinómica es el modelo correcto para los datos, tengo que hacerlo.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está con el rango de los valores x que se están utilizando. Cuando se utilizan los años de 1950 a 2018 como los valores x, la regresión polinómica resultante no se ajusta bien a los datos. Esto podría deberse al hecho de que la relación entre los valores x e y no es una función polinómica simple.

    Sin embargo, cuando se utiliza el índice como valores x (es decir, utilizando el arreglo [1, 2, 3, …, 70] en lugar de los años), la regresión polinómica funciona mejor para los grados 4 o más.

    Si desea probar el grado 2 o 3, podría intentar transformar los valores x antes de ajustar el modelo. Por ejemplo, podría intentar utilizar el cuadrado o el cubo del índice como nuevos valores de x:

    x_transformed = np.hstack((x, x**2, x**3))  # agregar columnas para x^2 y x^3
    polynomial_features = PolynomialFeatures(degree=3)
    x_poly = polynomial_features.fit_transform(x_transformed)
    modelo = Regresión lineal()
    modelo.fit(x_poly, y)
    y_poly_pred = modelo.predict(x_poly)
    

    Este enfoque utiliza los mismos valores x que antes (el índice), pero agrega columnas adicionales para x^2 y x^3. Luego, se aplica una regresión polinómica de grado 3 a los valores de x transformados.

    Tenga en cuenta que la regresión polinómica puede no ser el mejor modelo para sus datos si la relación entre x e y no es una función polinómica simple. Puede valer la pena explorar otros tipos de modelos, como la regresión lineal con términos de interacción o los árboles de regresión.

Comments are closed.