Comparación de los bosques aleatorios y el metaestimador de salida múltiple

Un ejemplo para comparar la regresión de salida múltiple con bosque aleatorio (random forest) y el metaestimador multioutput.MultiOutputRegressor.

Este ejemplo ilustra el uso del metaestimador multioutput.MultiOutputRegressor para realizar una regresión de salida múltiple. Se utiliza un regresor de bosque aleatorio, que admite la regresión de salida múltiple de forma nativa, por lo que se pueden comparar los resultados.

El regresor del bosque aleatorio sólo predice valores dentro del rango de las observaciones o más cercanos a cero para cada uno de los objetivos. En consecuencia, las predicciones están sesgadas hacia el centro del círculo.

Utilizando una única característica subyacente, el modelo aprende tanto la coordenada x como la y como salida.

Comparación de los bosques aleatorios y el metaestimador de salida múltiple
print(__doc__)

# Author: Tim Head <betatim@gmail.com>
#
# License: BSD 3 clause

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


# Create a random dataset
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))

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

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

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

# Predict on new data
y_multirf = regr_multirf.predict(X_test)
y_rf = regr_rf.predict(X_test)

# Plot the results
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_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.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.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()

Tiempo total de ejecución del script: ( 0 minutos 0.581 segundos)

Galería generada por Sphinx-Gallery