Regressão de Árvore de Decisão Boostada

Beginner

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

Introdução

Neste laboratório, utilizaremos a biblioteca Scikit-Learn do Python para realizar Regressão de Árvore de Decisão Reforçada num conjunto de dados sinusoidal 1D. Compararemos o desempenho de um único Regressor de Árvore de Decisão com o de um Regressor AdaBoost com 300 Regressores de Árvore de Decisão como aprendizes base.

Dicas da Máquina Virtual

Após o arranque da VM, 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 o carregamento. 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 o problema rapidamente para si.

Preparando os dados

Começamos preparando dados fictícios com uma relação sinusoidal e algum ruído gaussiano. Usamos a função linspace() do Numpy para criar um array 1D de 100 valores espaçados uniformemente entre 0 e 6. Em seguida, usamos o atributo np.newaxis para converter o array 1D num array 2D com forma (100,1). Aplicamos a função sin() a este array e adicionamos uma segunda onda senoidal obtida multiplicando o array por 6. Adicionamos, então, algum ruído gaussiano com média 0 e desvio padrão de 0,1 usando a função normal() do Numpy.

import numpy as np

rng = np.random.RandomState(1)
X = np.linspace(0, 6, 100)[:, np.newaxis]
y = np.sin(X).ravel() + np.sin(6 * X).ravel() + rng.normal(0, 0.1, X.shape[0])

Treinamento e previsão com Regressores DecisionTree e AdaBoost

Agora definimos os classificadores e ajustamo-los aos dados. Definimos o primeiro regressor como um DecisionTreeRegressor com max_depth=4. Definimos o segundo regressor como um AdaBoostRegressor com um DecisionTreeRegressor de max_depth=4 como aprendiz base. Construímos o Regressor AdaBoost com n_estimators=300 desses aprendizes base. Em seguida, ajustamos ambos os regressores aos dados e fazemos previsões nos mesmos dados para ver quão bem se ajustam.

from sklearn.ensemble import AdaBoostRegressor
from sklearn.tree import DecisionTreeRegressor

regr_1 = DecisionTreeRegressor(max_depth=4)

regr_2 = AdaBoostRegressor(
    DecisionTreeRegressor(max_depth=4), n_estimators=300, random_state=rng
)

regr_1.fit(X, y)
regr_2.fit(X, y)

y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)

Plotando os resultados

Finalmente, plotamos o quão bem nossos dois regressores, o regressor de árvore de decisão única e o regressor AdaBoost, conseguiram ajustar os dados. Usamos a função scatter() do Matplotlib para plotar as amostras de treinamento e os valores previstos de ambos os regressores. Usamos a função plot() do Matplotlib para plotar os valores previstos contra os dados para ambos os regressores. Adicionamos uma legenda ao gráfico para distinguir entre os dois regressores.

import matplotlib.pyplot as plt
import seaborn as sns

colors = sns.color_palette("colorblind")

plt.figure()
plt.scatter(X, y, color=colors[0], label="training samples")
plt.plot(X, y_1, color=colors[1], label="n_estimators=1", linewidth=2)
plt.plot(X, y_2, color=colors[2], label="n_estimators=300", linewidth=2)
plt.xlabel("dados")
plt.ylabel("alvo")
plt.title("Regressão de Árvore de Decisão Boostada")
plt.legend()
plt.show()

Resumo

Neste laboratório, aprendemos como realizar Regressão de Árvore de Decisão Boostada em um conjunto de dados sinusoidais unidimensionais usando a biblioteca Scikit-Learn do Python. Comparamos o desempenho de um único Regressor de Árvore de Decisão com o de um Regressor AdaBoost com 300 Regressores de Árvore de Decisão como aprendizes base. Visualizamos o desempenho de ambos os regressores usando o Matplotlib.