Construcció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:
123456import 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))
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:
123456789import 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()
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 X̃. 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 X̃ 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)
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 X̃, 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.
12345678910111213141516171819import 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()
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.
¡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
Awesome!
Completion rate improved to 5.26
Construcció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:
123456import 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))
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:
123456789import 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()
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 X̃. 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 X̃ 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)
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 X̃, 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.
12345678910111213141516171819import 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()
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.
¡Gracias por tus comentarios!