Restrições Monótonas em Gradient Boosting

Beginner

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

Introdução

Este é um tutorial passo a passo para demonstrar o efeito das restrições monotónicas num estimador de reforço de gradiente. O reforço de gradiente é uma técnica popular de aprendizagem de máquina usada para tarefas de regressão e classificação. Neste tutorial, criaremos um conjunto de dados artificial e usaremos um estimador de reforço de gradiente para demonstrar o efeito das restrições monotónicas nas previsões do modelo.

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 praticar.

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 a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Importar Bibliotecas

Começaremos importando as bibliotecas necessárias para este tutorial.

from sklearn.ensemble import HistGradientBoostingRegressor
from sklearn.inspection import PartialDependenceDisplay
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

Gerar Dados

Vamos gerar um conjunto de dados artificial onde o valor-alvo tem correlação positiva com a primeira característica e correlação negativa com a segunda característica. Também adicionaremos algum ruído aleatório para tornar os dados mais realistas.

rng = np.random.RandomState(0)

n_samples = 1000
f_0 = rng.rand(n_samples)
f_1 = rng.rand(n_samples)
X = np.c_[f_0, f_1]
noise = rng.normal(loc=0.0, scale=0.01, size=n_samples)

y = 5 * f_0 + np.sin(10 * np.pi * f_0) - 5 * f_1 - np.cos(10 * np.pi * f_1) + noise

Ajustar um Modelo Sem Restrições

Vamos ajustar um modelo aos dados gerados sem quaisquer restrições para observar o desempenho do modelo sem limitações.

gbdt_no_cst = HistGradientBoostingRegressor()
gbdt_no_cst.fit(X, y)

Ajustar um Modelo com Restrições Monótonas

Agora, ajustaremos outro modelo aos mesmos dados, mas com restrições monótonas nas características. Imporemos uma restrição de aumento monótono na primeira característica e uma restrição de diminuição monótona na segunda característica.

gbdt_with_monotonic_cst = HistGradientBoostingRegressor(monotonic_cst=[1, -1])
gbdt_with_monotonic_cst.fit(X, y)

Exibir Dependência Parcial

Agora, exibiremos a dependência parcial das previsões nas duas características para ambos os modelos.

fig, ax = plt.subplots()
disp = PartialDependenceDisplay.from_estimator(
    gbdt_no_cst,
    X,
    features=[0, 1],
    feature_names=(
        "Primeira característica",
        "Segunda característica",
    ),
    line_kw={"linewidth": 4, "label": "não restringido", "color": "tab:blue"},
    ax=ax,
)
PartialDependenceDisplay.from_estimator(
    gbdt_with_monotonic_cst,
    X,
    features=[0, 1],
    line_kw={"linewidth": 4, "label": "restringido", "color": "tab:orange"},
    ax=disp.axes_,
)

for f_idx in (0, 1):
    disp.axes_[0, f_idx].plot(
        X[:, f_idx], y, "o", alpha=0.3, zorder=-1, color="tab:green"
    )
    disp.axes_[0, f_idx].set_ylim(-6, 6)

plt.legend()
fig.suptitle("Efeito das restrições monótonas nas dependências parciais")
plt.show()

Utilizando Nomes de Características para Especificar Restrições Monótonas

Se os dados de treino tiverem nomes de características, é possível especificar as restrições monótonas passando um dicionário. Agora demonstraremos isso usando os mesmos dados e especificando as restrições usando os nomes das características.

X_df = pd.DataFrame(X, columns=["f_0", "f_1"])

gbdt_with_monotonic_cst_df = HistGradientBoostingRegressor(
    monotonic_cst={"f_0": 1, "f_1": -1}
).fit(X_df, y)

np.allclose(
    gbdt_with_monotonic_cst_df.predict(X_df), gbdt_with_monotonic_cst.predict(X)
)

Resumo

Neste tutorial, demonstramos o efeito das restrições monótonas num estimador de reforço de gradiente. Gerámos um conjunto de dados artificial, ajustámos dois modelos, um sem restrições e outro com restrições monótonas, e exibimos a dependência parcial das previsões nas duas características. Também demonstramos como especificar as restrições monótonas usando os nomes das características.