Plotar Regressão Multi-Output com Floresta Aleatória

Beginner

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

Introdução

Este laboratório demonstra o uso do estimador meta multi-saída para realizar regressão multi-saída. Um regressor de floresta aleatória é utilizado, que suporta regressão multi-saída nativamente, permitindo a comparação dos resultados. O objetivo deste laboratório é mostrar como utilizar o MultiOutputRegressor no scikit-learn para realizar regressão multi-saída e comparar os resultados com um regressor de floresta aleatória padrão.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Importar Bibliotecas

Primeiro, precisamos importar as bibliotecas necessárias. Usaremos numpy, matplotlib e os módulos RandomForestRegressor, train_test_split e MultiOutputRegressor do 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

Criar um Conjunto de Dados Aleatório

Em seguida, criaremos um conjunto de dados aleatório para usar em nossa regressão. Usaremos numpy para criar um conjunto de 600 valores de x entre -100 e 100, e os valores correspondentes de y calculados a partir do seno e cosseno dos valores de x mais algum ruído aleatório.

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 os Dados em Conjuntos de Treinamento e Teste

Dividiremos nossos dados em um conjunto de treinamento de 400 amostras e um conjunto de teste de 200 amostras usando a função train_test_split do scikit-learn.

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

Criar um Regressor Random Forest

Criaremos um regressor random forest com uma profundidade máxima de 30 e 100 estimadores usando o RandomForestRegressor do 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)

Criar MultiOutputRegressor

Criaremos um MultiOutputRegressor utilizando um regressor random forest como estimador subjacente. Usaremos os mesmos parâmetros da Etapa 4.

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

Prever em Novos Dados

Usaremos o regressor random forest e o regressor multi-output para fazer previsões nos nossos dados de teste.

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

Plotar Resultados

Plotaremos os resultados para comparar o desempenho dos dois regressores. Usaremos matplotlib para criar um gráfico de dispersão dos dados de teste reais, as previsões feitas pelo regressor random forest e as previsões feitas pelo regressor multi-output.

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="Dados")
plt.scatter(y_rf[:, 0], y_rf[:, 1], edgecolor="k", c="c", s=s, marker="^", alpha=a, label="Desempenho RF=%.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="Desempenho Multi RF=%.2f" % regr_multirf.score(X_test, y_test))
plt.xlim([-6, 6])
plt.ylim([-6, 6])
plt.xlabel("alvo 1")
plt.ylabel("alvo 2")
plt.title("Comparando Florestas Aleatórias e o Estimador Meta Multi-Saída")
plt.legend()
plt.show()

Sumário

Este laboratório demonstrou como usar o MultiOutputRegressor do scikit-learn para realizar regressão multi-output. Comparámos o desempenho do regressor multi-output com um regressor random forest padrão usando um conjunto de dados aleatório. Os resultados mostraram que o regressor multi-output teve um desempenho ligeiramente melhor do que o regressor random forest.