Graficar la regresión de bosque aleatorio con salida múltiple

Beginner

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

Introducción

Esta práctica demuestra el uso del estimador meta de múltiples salidas para realizar la regresión de múltiples salidas. Se utiliza un regresor de bosque aleatorio, que admite nativamente la regresión de múltiples salidas, por lo que se pueden comparar los resultados. El objetivo de esta práctica es mostrar cómo utilizar el MultiOutputRegressor en scikit-learn para realizar la regresión de múltiples salidas y comparar los resultados con un regresor de bosque aleatorio estándar.

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 las 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 bibliotecas

En primer lugar, necesitamos importar las bibliotecas necesarias. Vamos a utilizar numpy, matplotlib y RandomForestRegressor, train_test_split y MultiOutputRegressor de scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.multioutput import MultiOutputRegressor

Crear un conjunto de datos aleatorio

A continuación, crearemos un conjunto de datos aleatorio para utilizar en nuestra regresión. Utilizaremos numpy para crear un conjunto de 600 valores de x entre -100 y 100, y los valores correspondientes de y calculados a partir de la función seno y coseno de los valores de x más un poco de ruido aleatorio.

rng = np.random.RandomState(1)
X = np.sort(200 * rng.rand(600, 1) - 100, axis=0)
y = np.array([np.pi * np.sin(X).ravel(), np.pi * np.cos(X).ravel()]).T
y += 0.5 - rng.rand(*y.shape)

Dividir los datos en conjuntos de entrenamiento y prueba

Dividiremos nuestros datos en un conjunto de entrenamiento de 400 y un conjunto de prueba de 200 utilizando la función train_test_split de scikit-learn.

X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=400, test_size=200, random_state=4)

Crear un regresor de bosque aleatorio

Crearemos un regresor de bosque aleatorio con una profundidad máxima de 30 y 100 estimadores utilizando RandomForestRegressor de scikit-learn.

max_depth = 30
regr_rf = RandomForestRegressor(n_estimators=100, max_depth=max_depth, random_state=2)
regr_rf.fit(X_train, y_train)

Crear MultiOutputRegressor

Crearemos un MultiOutputRegressor utilizando un regresor de bosque aleatorio como estimador subyacente. Utilizaremos los mismos parámetros que en el Paso 4.

regr_multirf = MultiOutputRegressor(RandomForestRegressor(n_estimators=100, max_depth=max_depth, random_state=0))
regr_multirf.fit(X_train, y_train)

Realizar predicciones en nuevos datos

Utilizaremos tanto el regresor de bosque aleatorio como el regresor de salida múltiple para realizar predicciones en nuestros datos de prueba.

y_rf = regr_rf.predict(X_test)
y_multirf = regr_multirf.predict(X_test)

Graficar los resultados

Graficaremos los resultados para comparar el rendimiento de los dos regresores. Utilizaremos matplotlib para crear un diagrama de dispersión de los datos de prueba reales, las predicciones hechas por el regresor de bosque aleatorio y las predicciones hechas por el regresor de salida múltiple.

plt.figure()
s = 50
a = 0.4
plt.scatter(y_test[:, 0], y_test[:, 1], edgecolor="k", c="navy", s=s, marker="s", alpha=a, label="Data")
plt.scatter(y_rf[:, 0], y_rf[:, 1], edgecolor="k", c="c", s=s, marker="^", alpha=a, label="RF score=%.2f" % regr_rf.score(X_test, y_test))
plt.scatter(y_multirf[:, 0], y_multirf[:, 1], edgecolor="k", c="cornflowerblue", s=s, alpha=a, label="Multi RF score=%.2f" % regr_multirf.score(X_test, y_test))
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("target 1")
plt.ylabel("target 2")
plt.title("Comparing Random Forests and the Multi-Output Meta Estimator")
plt.legend()
plt.show()

Resumen

Esta práctica demostró cómo utilizar MultiOutputRegressor de scikit-learn para realizar regresión de salida múltiple. Comparamos el rendimiento del regresor de salida múltiple con el de un regresor de bosque aleatorio estándar utilizando un conjunto de datos aleatorios. Los resultados mostraron que el regresor de salida múltiple tuvo un rendimiento ligeramente mejor que el regresor de bosque aleatorio.