Introducción
En este tutorial, aprenderemos sobre la regresión isotónica, que es una técnica de regresión no paramétrica que encuentra una aproximación no decreciente de una función mientras minimiza el error cuadrático medio en los datos de entrenamiento. Usaremos scikit-learn, una popular biblioteca de aprendizaje automático en Python, para implementar la regresión isotónica y compararla con la regresión lineal.
Consejos sobre la VM
Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Importar las bibliotecas necesarias
Comenzaremos importando las bibliotecas necesarias para este tutorial, que son NumPy, Matplotlib y scikit-learn.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from sklearn.linear_model import LinearRegression
from sklearn.isotonic import IsotonicRegression
from sklearn.utils import check_random_state
Generar datos
A continuación, generaremos algunos datos para utilizar en nuestra regresión. Crearemos una tendencia no lineal monótona con ruido uniforme homoscedástico.
n = 100
x = np.arange(n)
rs = check_random_state(0)
y = rs.randint(-50, 50, size=(n,)) + 50.0 * np.log1p(np.arange(n))
Ajustar los modelos de regresión isotónica y lineal
Ahora ajustaremos tanto el modelo de regresión isotónica como el lineal a los datos generados.
ir = IsotonicRegression(out_of_bounds="clip")
y_ = ir.fit_transform(x, y)
lr = LinearRegression()
lr.fit(x[:, np.newaxis], y) ## x necesita ser 2d para LinearRegression
Graficar los resultados
Finalmente, graficaremos los resultados de ambos modelos de regresión para visualizar qué tan bien se ajustan a los datos.
segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
lc = LineCollection(segments, zorder=0)
lc.set_array(np.ones(len(y)))
lc.set_linewidths(np.full(n, 0.5))
fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(12, 6))
ax0.plot(x, y, "C0.", markersize=12)
ax0.plot(x, y_, "C1.-", markersize=12)
ax0.plot(x, lr.predict(x[:, np.newaxis]), "C2-")
ax0.add_collection(lc)
ax0.legend(("Training data", "Isotonic fit", "Linear fit"), loc="lower right")
ax0.set_title("Isotonic regression fit on noisy data (n=%d)" % n)
x_test = np.linspace(-10, 110, 1000)
ax1.plot(x_test, ir.predict(x_test), "C1-")
ax1.plot(ir.X_thresholds_, ir.y_thresholds_, "C1.", markersize=12)
ax1.set_title("Prediction function (%d thresholds)" % len(ir.X_thresholds_))
plt.show()
Resumen
En este tutorial, aprendimos sobre la regresión isotónica, una técnica de regresión no paramétrica que encuentra una aproximación no decreciente de una función mientras minimiza el error cuadrático medio en los datos de entrenamiento. También implementamos la regresión isotónica utilizando scikit-learn y la comparamos con la regresión lineal.