Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Construcción de Regresión Polinómica | Regresión Polinómica
Regresión Lineal con Python

bookConstrucción de Regresión Polinómica

Carga de archivo

Para este capítulo, tenemos un archivo llamado poly.csv, que primero cargaremos y revisaremos su contenido:

123456
import 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(5))
copy

Aquí tenemos una característica y el objetivo. A continuación, construiremos un diagrama de dispersión para comprender la relación entre la característica y el objetivo:

123456789
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

Es difícil imaginar que una línea recta se ajuste bien a estos datos, por lo que la regresión polinómica será una opción mucho mejor.

Construcción de la matriz X̃

Utilizaremos nuevamente la clase OLS. Sin embargo, necesitamos crear manualmente una matriz . Esto se logra añadiendo una columna al DataFrame con el cuadrado de 'Feature' de la siguiente manera:

df['Feature_squared'] = df['Feature'] ** 2

Pero si se desea construir una regresión polinómica de alto grado, será necesario agregar muchas columnas similares. Por suerte, Scikit-Learn proporciona una forma menos laboriosa de hacerlo utilizando la clase PolynomialFeatures.

El método fit_transform(X) espera que X sea un arreglo bidimensional o un DataFrame de pandas. Si tu X es un arreglo numpy unidimensional, el método reshape(-1,1) lo transformará en un arreglo bidimensional con el mismo contenido:

X = X.reshape(-1,1)

Si tu X es una columna de un DataFrame, puedes usar X = df[['col1']] para obtener un DataFrame en lugar de una Serie de pandas, la cual no es adecuada para fit_transform():

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Para construir una para la Regresión Polinómica de grado n, se utilizaría:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Nota

La clase PolynomialFeatures también agrega una columna con 1s, por lo que no es necesario usar sm.add_constant().

Construcción de la regresión polinómica y realización de predicciones

Sabiendo cómo obtener una , estamos listos para construir la regresión polinómica de la misma manera que los modelos anteriores:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Para predecir nuevos valores, X_new también debe transformarse utilizando PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

El siguiente ejemplo ejecutable muestra el proceso completo de construcción de una regresión polinómica. X_new aquí es un arreglo unidimensional de puntos entre -0.1 y 1.5. Estos son necesarios para la visualización. Y dado que es un arreglo unidimensional, se debe aplicar el método reshape(-1,1) antes de utilizarlo en la clase PolynomialFeatures.

12345678910111213141516171819
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class 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) n = 2 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Siéntete libre de experimentar con los valores de n en la octava línea. Observarás cómo cambia la gráfica dependiendo del grado de la regresión polinómica. Si prestas atención, notarás cuán diferentes son las predicciones para valores de la característica menores que 0 o mayores que 1.4. Ese será el tema del próximo capítulo.

question mark

Considera el siguiente código. ¿En cuál caso el código se ejecutará sin errores?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 5.26

bookConstrucción de Regresión Polinómica

Desliza para mostrar el menú

Carga de archivo

Para este capítulo, tenemos un archivo llamado poly.csv, que primero cargaremos y revisaremos su contenido:

123456
import 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(5))
copy

Aquí tenemos una característica y el objetivo. A continuación, construiremos un diagrama de dispersión para comprender la relación entre la característica y el objetivo:

123456789
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
copy

Es difícil imaginar que una línea recta se ajuste bien a estos datos, por lo que la regresión polinómica será una opción mucho mejor.

Construcción de la matriz X̃

Utilizaremos nuevamente la clase OLS. Sin embargo, necesitamos crear manualmente una matriz . Esto se logra añadiendo una columna al DataFrame con el cuadrado de 'Feature' de la siguiente manera:

df['Feature_squared'] = df['Feature'] ** 2

Pero si se desea construir una regresión polinómica de alto grado, será necesario agregar muchas columnas similares. Por suerte, Scikit-Learn proporciona una forma menos laboriosa de hacerlo utilizando la clase PolynomialFeatures.

El método fit_transform(X) espera que X sea un arreglo bidimensional o un DataFrame de pandas. Si tu X es un arreglo numpy unidimensional, el método reshape(-1,1) lo transformará en un arreglo bidimensional con el mismo contenido:

X = X.reshape(-1,1)

Si tu X es una columna de un DataFrame, puedes usar X = df[['col1']] para obtener un DataFrame en lugar de una Serie de pandas, la cual no es adecuada para fit_transform():

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Para construir una para la Regresión Polinómica de grado n, se utilizaría:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Nota

La clase PolynomialFeatures también agrega una columna con 1s, por lo que no es necesario usar sm.add_constant().

Construcción de la regresión polinómica y realización de predicciones

Sabiendo cómo obtener una , estamos listos para construir la regresión polinómica de la misma manera que los modelos anteriores:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Para predecir nuevos valores, X_new también debe transformarse utilizando PolynomialFeatures.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

El siguiente ejemplo ejecutable muestra el proceso completo de construcción de una regresión polinómica. X_new aquí es un arreglo unidimensional de puntos entre -0.1 y 1.5. Estos son necesarios para la visualización. Y dado que es un arreglo unidimensional, se debe aplicar el método reshape(-1,1) antes de utilizarlo en la clase PolynomialFeatures.

12345678910111213141516171819
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class 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) n = 2 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.show()
copy

Siéntete libre de experimentar con los valores de n en la octava línea. Observarás cómo cambia la gráfica dependiendo del grado de la regresión polinómica. Si prestas atención, notarás cuán diferentes son las predicciones para valores de la característica menores que 0 o mayores que 1.4. Ese será el tema del próximo capítulo.

question mark

Considera el siguiente código. ¿En cuál caso el código se ejecutará sin errores?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 3
some-alt