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.