Entendendo a regressão com árvore de decisão
A regressão com árvore de decisão é um modelo supervisionado. Ele prevê valores numéricos contínuos, como preços de casas. Diferentemente da classificação, a saída aqui é um número real. Por exemplo, podemos prever a temperatura de amanhã. Este modelo divide os dados em regiões retangulares. Cada região recebe um valor constante de predição. A estrutura lembra uma árvore invertida com galhos e folhas.
As características principais incluem simplicidade e interpretabilidade. A árvore é construída por meio de divisões recursivas. Cada divisão usa uma característica e um ponto de corte. O objetivo é minimizar o erro quadrático médio local. Modelos mais profundos podem sofrer de overfitting. Por isso, o controle da complexidade é essencial. A predição final é a média dos valores na folha.
Arquitetura e componentes internos
A arquitetura começa com o nó raiz, que contém todos os dados. Cada nó interno testa uma única característica. O teste pergunta: o valor é menor que um limiar? Conforme a resposta, os dados seguem para um ramo. Esse processo se repete até chegar aos nós folha. Cada folha armazena um valor constante predito. Em regressão, esse valor é a média dos alvos locais. A profundidade da árvore é o maior número de divisões. Quanto mais folhas, mais complexo é o modelo final.
A construção usa um algoritmo guloso por eficiência. Ele busca a melhor divisão em cada etapa local. A métrica típica é a redução da variância. A fórmula da variância de um nó é: \(\sigma^2 = \frac{1}{N}\sum_{i=1}^{N} (y_i – \bar{y})^2\). A redução da variância após divisão é calculada assim: \(\Delta = \sigma^2_{pai} – \left( \frac{N_{esq}}{N_{pai}} \sigma^2_{esq} + \frac{N_{dir}}{N_{pai}} \sigma^2_{dir} \right)\). A divisão escolhida maximiza esse delta positivo. Esse processo é repetido até um critério de parada.
Hiperparâmetros essenciais
Os hiperparâmetros controlam o crescimento da árvore. A profundidade máxima limita quantas divisões são feitas. O número mínimo de amostras por folha evita folhas vazias. O número mínimo para divisão impede divisões muito pequenas. Esses parâmetros podem ser ajustados por validação cruzada. Árvores muito profundas geralmente memorizam ruídos. Árvores rasas podem não capturar padrões complexos. Um equilíbrio é alcançado com hiperparâmetros adequados. É comum usar poda ou restrições para regularizar.
Outros parâmetros incluem o critério de divisão. O erro quadrático médio (MSE) é a função padrão. A fórmula do MSE em um nó é apresentada abaixo: \(MSE = \frac{1}{N} \sum_{i=1}^{N} (y_i – \hat{y})^2\). Nessa expressão, \(\hat{y}\) é a média local. Modelos de árvore são frequentemente combinados em florestas. Florestas aleatórias melhoram a precisão pela média de árvores. Contudo, a árvore única já é um ótimo ponto de partida. A interpretabilidade é mantida em árvores de pequena profundidade.
Exemplo prático em Python
Abaixo está um código para rodar no Google Colab. Ele gera dados sintéticos e treina uma árvore de regressão. O gráfico mostra a predição sobreposta aos dados reais. Certifique-se de instalar as bibliotecas necessárias. O código usa scikit-learn, matplotlib e numpy.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
import numpy as np import matplotlib.pyplot as plt from sklearn.tree import DecisionTreeRegressor # Dados sintéticos: y = x^2 + ruído np.random.seed(42) X = np.sort(5 * np.random.rand(80, 1), axis=0) y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0]) # Árvore de regressão com hiperparâmetros controlados regressor = DecisionTreeRegressor(max_depth=4, min_samples_split=5, random_state=42) regressor.fit(X, y) # Predição para valores suaves X_test = np.arange(0.0, 5.0, 0.01)[:, np.newaxis] y_pred = regressor.predict(X_test) # Gráfico plt.figure(figsize=(10, 6)) plt.scatter(X, y, s=20, label="Dados reais", color="blue") plt.plot(X_test, y_pred, label="Predição da árvore", color="red", linewidth=2) plt.xlabel("Característica X") plt.ylabel("Alvo y") plt.title("Regressão com Árvore de Decisão") plt.legend() plt.grid(True) plt.show() |
O código cria 80 pontos com relação senoidal e ruído. A árvore usa profundidade máxima 4 para evitar overfitting. O gráfico resultante mostra degraus horizontais típicos. Cada degrau corresponde a uma região de uma folha. Isso ilustra perfeitamente como a árvore particiona o espaço. Alterar a profundidade para 20 produziria muitos degraus. Assim, o modelo se ajustaria excessivamente ao ruído. Por fim, recomenda-se explorar outros hiperparâmetros. Essa abordagem é poderosa e fácil de interpretar.