Regresión polinomial en Python

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.

Ejemplo

    import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 5, 10, 17, 26])
X = PolynomialFeatures(2).fit_transform(x)
print(LinearRegression().fit(X, y).predict(X).round(2))
  

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:

Regresión polinomial en python

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:

Ejemplo

    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:

Ejemplo

    import numpy as np

# Datos de muestra
x = np.array([1, 2, 3, 4, 5, 6])
y = np.array([3, 6, 8, 11, 15, 18])
print(y)
  
Abrir en editor

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:

Ejemplo

    import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 5, 10, 17, 26])
X = PolynomialFeatures(2).fit_transform(x)
print(LinearRegression().fit(X, y).predict(X).round(2))
  

Crear y entrenar el modelo

Ahora que hemos transformado los datos, podemos crear y entrenar nuestro modelo de regresión polinomial:

Ejemplo

    # Crear el modelo de regresión lineal
model = LinearRegression()
# Entrenar
# Entrenar el modelo con los datos transformados
model.fit(x_poly, y)
print(model)
print(model)
  

Realizar predicciones

Con nuestro modelo entrenado, podemos hacer predicciones sobre nuevos datos:

Ejemplo

    # Datos para hacer predicciones
x_new = np.array([7, 8])
# Tran
# 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)
print(y_pred)
  

Visualizar los resultados

Finalmente, podemos visualizar los resultados de nuestra regresión polinomial:

Ejemplo

    plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
plt.ylabel('Y')
plt.legend()
pltplt.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.

Ejemplo

    import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 5, 10, 17, 26])
poly = PolynomialFeatures(degree=2)
x_poly = poly.fit_transform(x)
modelo = LinearRegression().fit(x_poly, y)
print(modelo.predict(poly.transform([[6]])))
  

Resultado:

Regresión polinómica en Python

Practica Regresión polinomial en Python en el editor

Pon en práctica lo aprendido con nuestro editor Python interactivo. Cada ejercicio incluye el código de partida y un botón para abrirlo en una nueva pestaña, donde puedes modificarlo y ejecutarlo.

Ejercicio: Regresión lineal

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.

Ejemplo

    import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 5, 10, 17, 26])
poly = PolynomialFeatures(degree=2)
x_poly = poly.fit_transform(x)
modelo = LinearRegression().fit(x_poly, y)
print(modelo.predict(poly.transform([[6]])))
  
Abrir en editor

Ejercicio: Regresión lineal (2)

Para este ejemplo, generaremos algunos datos de muestra para realizar la regresión polinomial.

Ejemplo

    import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

x = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 5, 10, 17, 26])
X = PolynomialFeatures(2).fit_transform(x)
print(LinearRegression().fit(X, y).predict(X).round(2))
  
Abrir en editor

Ejercicio: Regresión lineal (3)

Antes de realizar la regresión polinomial, debemos transformar los datos para que se ajusten a un polinomio. Utilizaremos la clase PolynomialFeatures de.

Ejemplo

    import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
x = np.array([1, 2, 3, 4]).reshape(-1, 1)
y = np.array([1, 4, 9, 16])
X = PolynomialFeatures(2).fit_transform(x)
print(LinearRegression().fit(X, y).coef_)
  
Abrir en editor

Ejercicio: Convertir a lista

Ahora que hemos transformado los datos, podemos crear y entrenar nuestro modelo de regresión polinomial.

Ejemplo

    import numpy as np
x = np.linspace(-2, 2, 5)
y = x ** 2
print(list(zip(x.round(2), y.round(2))))
  
Abrir en editor

Ejercicio: Crear un array NumPy

Con nuestro modelo entrenado, podemos hacer predicciones sobre nuevos datos.

Ejemplo

    import numpy as np
from sklearn.metrics import r2_score
y_true = np.array([3, 5, 7])
y_pred = np.array([2.8, 5.1, 6.9])
print(r2_score(y_true, y_pred))
  
Abrir en editor

Ejercicio: Usar print()

Finalmente, podemos visualizar los resultados de nuestra regresión polinomial.

Ejemplo

    import numpy as np
from sklearn.preprocessing import PolynomialFeatures
print(PolynomialFeatures(degree=3).fit_transform([[2]]))
  
Abrir en editor

Comprueba lo aprendido

Responde 2–3 preguntas sobre esta lección. Verás ✓ en verde si aciertas o ✗ en rojo si fallas.