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
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 encoef_
es correcto y corresponde al orden de los términos polinómicos generados porPolynomialFeatures
.Por ejemplo, en el código proporcionado,
degree=2
, por lo que los términos polinómicos generados porPolynomialFeatures
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.