Construcción de Regresión Polinómica
Carga de archivo
Se carga poly.csv y se inspecciona:
1234import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head())
Luego, visualización de la relación:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Una línea recta se ajusta de manera deficiente, por lo que la regresión polinómica es más adecuada.
Construcción de la matriz X̃
Para crear X̃, se pueden agregar manualmente las características al cuadrado:
df['Feature_squared'] = df['Feature'] ** 2
Pero para grados superiores, PolynomialFeatures es más sencillo. Requiere una estructura bidimensional:
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
poly = PolynomialFeatures(n)
X_tilde = poly.fit_transform(X)
También agrega la columna constante, por lo que no es necesario sm.add_constant().
Si X es unidimensional, convertirla:
X = X.reshape(-1, 1)
Construcción de la regresión polinómica
import statsmodels.api as sm
y = df['Target']
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
model = sm.OLS(y, X_tilde).fit()
La predicción requiere transformar los nuevos datos de la misma manera:
X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = model.predict(X_new_tilde)
Ejemplo completo
123456789101112131415161718import pandas as pd, numpy as np, matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures df = pd.read_csv(file_link) n = 2 X = df[['Feature']] y = df['Target'] X_tilde = PolynomialFeatures(n).fit_transform(X) model = sm.OLS(y, X_tilde).fit() X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) y_pred = model.predict(X_new_tilde) plt.scatter(X, y) plt.plot(X_new, y_pred) plt.show()
Prueba diferentes valores de n para observar cómo cambia la curva y cómo se comportan las predicciones fuera del rango original de la característica; esto conduce al siguiente capítulo.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
What does the `PolynomialFeatures` class do in this context?
How do I choose the best degree `n` for my polynomial regression?
Can you explain why a straight line fits poorly in this example?
Awesome!
Completion rate improved to 5.26
Construcción de Regresión Polinómica
Desliza para mostrar el menú
Carga de archivo
Se carga poly.csv y se inspecciona:
1234import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) print(df.head())
Luego, visualización de la relación:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Una línea recta se ajusta de manera deficiente, por lo que la regresión polinómica es más adecuada.
Construcción de la matriz X̃
Para crear X̃, se pueden agregar manualmente las características al cuadrado:
df['Feature_squared'] = df['Feature'] ** 2
Pero para grados superiores, PolynomialFeatures es más sencillo. Requiere una estructura bidimensional:
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
poly = PolynomialFeatures(n)
X_tilde = poly.fit_transform(X)
También agrega la columna constante, por lo que no es necesario sm.add_constant().
Si X es unidimensional, convertirla:
X = X.reshape(-1, 1)
Construcción de la regresión polinómica
import statsmodels.api as sm
y = df['Target']
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
model = sm.OLS(y, X_tilde).fit()
La predicción requiere transformar los nuevos datos de la misma manera:
X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = model.predict(X_new_tilde)
Ejemplo completo
123456789101112131415161718import pandas as pd, numpy as np, matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures df = pd.read_csv(file_link) n = 2 X = df[['Feature']] y = df['Target'] X_tilde = PolynomialFeatures(n).fit_transform(X) model = sm.OLS(y, X_tilde).fit() X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) y_pred = model.predict(X_new_tilde) plt.scatter(X, y) plt.plot(X_new, y_pred) plt.show()
Prueba diferentes valores de n para observar cómo cambia la curva y cómo se comportan las predicciones fuera del rango original de la característica; esto conduce al siguiente capítulo.
¡Gracias por tus comentarios!