La regresión es una técnica estadística poderosa que se utiliza para modelar la relación entre una variable independiente y una variable dependiente. Aunque la regresión lineal es una de las formas más comunes de regresión, a menudo encontramos relaciones no lineales entre las variables en el mundo real. Para abordar este desafío, existe la regresión polinomial, que permite modelar relaciones no lineales mediante el ajuste de un polinomio a los datos. En este artículo, aprenderemos cómo realizar una regresión polinomial en Python utilizando la biblioteca Scikit-learn.
¿Qué es la Regresión Polinomial?
La regresión polinomial es una extensión de la regresión lineal en la que se ajusta un polinomio a los datos en lugar de una línea recta. Un polinomio es una función matemática que involucra términos con coeficientes y exponentes. La regresión polinomial puede modelar relaciones más complejas y no lineales entre las variables, lo que la hace útil en muchos problemas del mundo real.
# Importar las bibliotecas necesarias import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Datos de muestra x = np.array([1, 2, 3, 4, 5, 6]) y = np.array([3, 6, 8, 11, 15, 18]) # Transformar los datos a un polinomio de grado 2 transformer = PolynomialFeatures(degree=2, include_bias=False) x_poly = transformer.fit_transform(x.reshape(-1, 1)) # Crear el modelo de regresión lineal model = LinearRegression() # Entrenar el modelo con los datos transformados model.fit(x_poly, y) # Datos para hacer predicciones x_new = np.array([7, 8]) # Transformar los datos a un polinomio de grado 2 x_new_poly = transformer.transform(x_new.reshape(-1, 1)) # Realizar predicciones y_pred = model.predict(x_new_poly) # Crear una línea para el polinomio ajustado x_fit = np.linspace(1, 8, 100) x_fit_poly = transformer.transform(x_fit.reshape(-1, 1)) y_fit = model.predict(x_fit_poly) # Graficar los datos de muestra y el polinomio ajustado plt.scatter(x, y, label='Datos de muestra') plt.plot(x_fit, y_fit, label='Regresión Polinomial', color='red') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show()
Este código realiza una regresión polinomial de grado 2 utilizando NumPy, scikit-learn y matplotlib. Toma datos de muestra x e y, transforma los datos a un polinomio de grado 2, entrena un modelo de regresión lineal y realiza predicciones. Luego, dibuja los datos de muestra junto con el polinomio ajustado.
Resultado:

Implementación en Python paso a paso
A continuación, se presentan los pasos para realizar una regresión polinomial en Python utilizando Scikit-learn:
Importar las bibliotecas
Primero, debemos importar las bibliotecas necesarias:
import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures
Crear los datos
Para este ejemplo, generaremos algunos datos de muestra para realizar la regresión polinomial:
# Datos de muestra x = np.array([1, 2, 3, 4, 5, 6]) y = np.array([3, 6, 8, 11, 15, 18])
Transformar los datos
Antes de realizar la regresión polinomial, debemos transformar los datos para que se ajusten a un polinomio. Utilizaremos la clase PolynomialFeatures
de Scikit-learn para realizar esta transformación:
# Transformar los datos a un polinomio de grado 2 transformer = PolynomialFeatures(degree=2, include_bias=False) x_poly = transformer.fit_transform(x[:, np.newaxis])
Crear y entrenar el modelo
Ahora que hemos transformado los datos, podemos crear y entrenar nuestro modelo de regresión polinomial:
# Crear el modelo de regresión lineal model = LinearRegression() # Entrenar el modelo con los datos transformados model.fit(x_poly, y)
Realizar predicciones
Con nuestro modelo entrenado, podemos hacer predicciones sobre nuevos datos:
# Datos para hacer predicciones x_new = np.array([7, 8]) # Transformar los datos a un polinomio de grado 2 x_new_poly = transformer.transform(x_new[:, np.newaxis]) # Realizar predicciones y_pred = model.predict(x_new_poly)
Visualizar los resultados
Finalmente, podemos visualizar los resultados de nuestra regresión polinomial:
# Crear una línea para el polinomio ajustado x_fit = np.linspace(1, 8, 100) x_fit_poly = transformer.transform(x_fit[:, np.newaxis]) y_fit = model.predict(x_fit_poly) # Graficar los datos de muestra y el polinomio ajustado plt.scatter(x, y, label='Datos de muestra') plt.plot(x_fit, y_fit, label='Regresión Polinomial', color='red') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show()
La regresión polinomial es una herramienta útil para modelar relaciones no lineales entre variables. En Python, podemos realizar una regresión polinomial utilizando la biblioteca Scikit-learn, lo que nos permite ajustar un polinomio a los datos y hacer predicciones sobre nuevos valores. Con esta técnica, podemos mejorar la precisión de nuestros modelos y obtener una mejor comprensión de los datos en problemas del mundo real.
Otro ejemplo
En el siguiente ejemplo se realiza una regresión polinomial de grado 2 utilizando los datos x e y. Realiza la transformación de los datos, entrena un modelo de regresión lineal y realiza predicciones. Luego, grafica los datos de muestra junto con el polinomio ajustado.
# Importar las bibliotecas necesarias import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Datos de muestra x = np.array([1, 2, 3, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 21, 22]) y = np.array([100, 90, 80, 60, 60, 55, 60, 65, 70, 70, 75, 76, 78, 79, 90, 99, 99, 100]) # Transformar los datos a un polinomio de grado 2 transformer = PolynomialFeatures(degree=2, include_bias=False) x_poly = transformer.fit_transform(x.reshape(-1, 1)) # Crear el modelo de regresión lineal model = LinearRegression() # Entrenar el modelo con los datos transformados model.fit(x_poly, y) # Datos para hacer predicciones x_new = np.array([4, 11, 17]) # Transformar los datos a un polinomio de grado 2 x_new_poly = transformer.transform(x_new.reshape(-1, 1)) # Realizar predicciones y_pred = model.predict(x_new_poly) # Crear una línea para el polinomio ajustado x_fit = np.linspace(1, 22, 100) x_fit_poly = transformer.transform(x_fit.reshape(-1, 1)) y_fit = model.predict(x_fit_poly) # Graficar los datos de muestra y el polinomio ajustado plt.scatter(x, y, label='Datos de muestra') plt.plot(x_fit, y_fit, label='Regresión Polinomial', color='red') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show()
Resultado:
