Regresión isotónica no paramétrica con Scikit-Learn

Machine LearningMachine LearningBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/isotonic("Isotonic Regression") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/utils("Utilities") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49172{{"Regresión isotónica no paramétrica con Scikit-Learn"}} sklearn/isotonic -.-> lab-49172{{"Regresión isotónica no paramétrica con Scikit-Learn"}} sklearn/utils -.-> lab-49172{{"Regresión isotónica no paramétrica con Scikit-Learn"}} ml/sklearn -.-> lab-49172{{"Regresión isotónica no paramétrica con Scikit-Learn"}} end

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.