Regresión de árbol de decisión multi-salida

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

Esta práctica te guiará a través de un ejemplo de regresión con múltiples salidas utilizando un árbol de decisión. Verás cómo se utilizan los árboles de decisión para predecir simultáneamente las observaciones ruidosas de x e y de un círculo a partir de una única característica subyacente. Como resultado, aprenderá regresiones lineales locales que se aproximan al círculo.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haz 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 tengas que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos rápidamente el problema para ti.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/tree("Decision Trees") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/tree -.-> lab-49322{{"Regresión de árbol de decisión multi-salida"}} ml/sklearn -.-> lab-49322{{"Regresión de árbol de decisión multi-salida"}} end

Importar bibliotecas

En este paso, importaremos las bibliotecas necesarias, que son numpy, matplotlib.pyplot y DecisionTreeRegressor de sklearn.tree.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

Crear un conjunto de datos aleatorio

En este paso, crearemos un conjunto de datos aleatorio. Utilizaremos la biblioteca numpy para crear una matriz ordenada de 100 elementos, con valores aleatorios entre 0 y 200, y luego restaremos 100 a cada elemento. Luego usaremos numpy para calcular el seno y el coseno de cada elemento, y uniremos estas matrices en una matriz bidimensional de forma (100, 2) para crear la matriz y. También agregaremos ruido aleatorio a cada quinto elemento.

## Create a random dataset
rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(100, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y[::5, :] += 0.5 - rng.rand(20, 2)

Ajustar el modelo de regresión

En este paso, ajustaremos los modelos de regresión. Utilizaremos DecisionTreeRegressor de sklearn.tree para ajustar tres modelos diferentes con diferentes profundidades máximas.

## Fit regression model
regr_1 = DecisionTreeRegressor(max_depth=2)
regr_2 = DecisionTreeRegressor(max_depth=5)
regr_3 = DecisionTreeRegressor(max_depth=8)
regr_1.fit(X, y)
regr_2.fit(X, y)
regr_3.fit(X, y)

Predecir

En este paso, haremos predicciones utilizando los modelos que creamos en el paso anterior. Utilizaremos np.arange para crear una nueva matriz de valores de -100 a 100 con un intervalo de 0.01, y luego usaremos el método predict de nuestros modelos para predecir la salida.

## Predict
X_test = np.arange(-100.0, 100.0, 0.01)[:, np.newaxis]
y_1 = regr_1.predict(X_test)
y_2 = regr_2.predict(X_test)
y_3 = regr_3.predict(X_test)

Graficar los resultados

En este paso, graficaremos los resultados. Utilizaremos matplotlib.pyplot para crear un diagrama de dispersión de los datos originales y de cada una de las tres predicciones del modelo. También agregaremos etiquetas y un título al gráfico.

## Plot the results
plt.figure()
s = 25
plt.scatter(y[:, 0], y[:, 1], c="navy", s=s, edgecolor="black", label="data")
plt.scatter(
    y_1[:, 0],
    y_1[:, 1],
    c="cornflowerblue",
    s=s,
    edgecolor="black",
    label="max_depth=2",
)
plt.scatter(y_2[:, 0], y_2[:, 1], c="red", s=s, edgecolor="black", label="max_depth=5")
plt.scatter(
    y_3[:, 0], y_3[:, 1], c="orange", s=s, edgecolor="black", label="max_depth=8"
)
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("Multi-output Decision Tree Regression")
plt.legend(loc="best")
plt.show()

Resumen

En este laboratorio, aprendimos cómo utilizar árboles de decisión para la regresión multi-salida. Creamos un conjunto de datos aleatorio, ajustamos modelos de regresión, hicimos predicciones y graficamos los resultados. Los árboles de decisión aprendieron regresiones lineales locales que se asemejan a un círculo. También vimos que si la profundidad máxima del árbol se establece demasiado alta, los árboles de decisión aprenden detalles demasiado finos de los datos de entrenamiento y aprenden del ruido, es decir, se sobreajustan.