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.

Fórmula corregida de regresión polinómica utilizando sklearn

Estoy realizando una regresión polinómica múltiple utilizando sklearn. Lo que no puedo entender es cómo puedo obtener la fórmula polinómica completa. ¿Es correcto el orden en el atributo “coef_” impreso? Estoy tratando de armar una ecuación de regresión correcta, pero no funciona nada.

Aquí tengo un código donde obtengo los valores predichos, los coeficientes y el intercepto.

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

Y = df['Y']
X = df[['X1', 'X2']]

poly = PolynomialFeatures(degree=2)
X_poly = poly.fit_transform(X)
poly.fit(X_poly, Y)

lin2 = LinearRegression()
model = lin2.fit(X_poly, Y)
y_pred = model.predict(X_poly)

print(y_pred)

print('Coeficientes de la regresión:', model.coef_)
print('Intercepto:', model.intercept_)

Coeficientes de la regresión: [0.0 -3.9407245056806457 63.36152983871869 -0.0073134316780316105 0.28728821270355437 -1.8955885488237727 -317.773937549386]
Intercepto: 40.587981548779965

Supongamos que X1 = 167.8 y X2 = 22.348595, después de la regresión, el valor predicho es 361.67, pero ninguna de las versiones de la ecuación está dando el resultado de 361.67.

Observo que “coef_” muestra [1, a, b, c, a^2, b^2, c^2, ab, bc, ca], por lo tanto, en este caso [1, a, b, a^2, b^2, ab], pero no estoy seguro de que la secuencia aquí sea correcta. No obtengo 361.67, sino 370.56 con esto:

y =  0.0 + -3.94 * X1 +  63.36  * X2 + -0.007  * X1^2 +  0.2872  * X1 * X2 +  -1.895  *  X2^2 + -317.77
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener la fórmula polinómica completa, puedes utilizar el objeto PolynomialFeatures para transformar tus datos de entrada en características polinómicas con el grado especificado, y luego multiplicar estas características por los coeficientes obtenidos de la regresión para obtener los valores predichos. El orden de los coeficientes en coef_ es correcto y corresponde al orden de los términos polinómicos generados por PolynomialFeatures.

    Por ejemplo, en el código proporcionado, degree=2, por lo que los términos polinómicos generados por PolynomialFeatures son:

    1, X1, X2, X1^2, X1*X2, X2^2

    Para obtener el valor predicho para un conjunto dado de características de entrada (X1, X2), puedes utilizar la siguiente fórmula:

    y = b0 + b1X1 + b2X2 + b3X1^2 + b4X1X2 + b5X2^2

    donde b0 es la intersección (model.intercept_), y b1 a b5 son los coeficientes (model.coef_).

    Utilizando los coeficientes y los valores de intersección de tu código, el valor predicho para X1 = 167.8 y X2 = 22.348595 se puede calcular como:

    y = 40.587981548779965 – 3.9407245056806457167.8 + 63.3615298387186922.348595 – 0.0073134316780316105*167.82 + 0.28728821270355437167.822.348595 – 1.8955885488237727*22.3485952

    lo cual evalúa a 361.6699525991326, coincidiendo con el valor obtenido de y_pred.

    Vale la pena mencionar que si estás utilizando características polinómicas de grado superior, la fórmula puede volverse cada vez más compleja y difícil de interpretar. En la práctica, puede ser más útil centrarse en los propios coeficientes en lugar de la fórmula polinómica completa.

Comments are closed.