Regressão por Gradient Boosting

Beginner

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

Introdução

Neste laboratório, utilizaremos Gradient Boosting para construir um modelo preditivo para a tarefa de regressão de diabetes. Treinaremos o modelo no conjunto de dados de diabetes e obteremos os resultados de sklearn.ensemble.GradientBoostingRegressor com perda de mínimos quadrados e 500 árvores de regressão de profundidade 4.

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.

Carregar os Dados

Primeiro, carregaremos o conjunto de dados de diabetes.

diabetes = datasets.load_diabetes()
X, y = diabetes.data, diabetes.target

Pré-processamento de Dados

Em seguida, dividiremos nosso conjunto de dados para usar 90% para treinamento e deixar o restante para teste. Também definiremos os parâmetros do modelo de regressão.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=13)

params = {
    "n_estimators": 500,
    "max_depth": 4,
    "min_samples_split": 5,
    "learning_rate": 0.01,
    "loss": "squared_error",
}

Ajustar o Modelo de Regressão

Agora, iniciaremos os regressores de aumento de gradiente e o ajustaremos com nossos dados de treinamento. Vamos também analisar o erro quadrático médio nos dados de teste.

reg = ensemble.GradientBoostingRegressor(**params)
reg.fit(X_train, y_train)

mse = mean_squared_error(y_test, reg.predict(X_test))
print("O erro quadrático médio (MSE) no conjunto de teste: {:.4f}".format(mse))

Plotar a Desvio de Treinamento

Finalmente, visualizaremos os resultados. Para isso, primeiro calculamos o desvio do conjunto de teste e, em seguida, plotamos-o contra as iterações de aumento.

test_score = np.zeros((params["n_estimators"],), dtype=np.float64)
for i, y_pred in enumerate(reg.staged_predict(X_test)):
    test_score[i] = mean_squared_error(y_test, y_pred)

fig = plt.figure(figsize=(6, 6))
plt.subplot(1, 1, 1)
plt.title("Desvio")
plt.plot(
    np.arange(params["n_estimators"]) + 1,
    reg.train_score_,
    "b-",
    label="Desvio do Conjunto de Treinamento",
)
plt.plot(
    np.arange(params["n_estimators"]) + 1, test_score, "r-", label="Desvio do Conjunto de Teste"
)
plt.legend(loc="upper right")
plt.xlabel("Iterações de Aumento")
plt.ylabel("Desvio")
fig.tight_layout()
plt.show()

Plotar a Importância das Características

Neste exemplo, usaremos as importâncias das características baseadas na impureza para identificar as características mais preditivas.

feature_importance = reg.feature_importances_
sorted_idx = np.argsort(feature_importance)
pos = np.arange(sorted_idx.shape[0]) + 0.5
fig = plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.barh(pos, feature_importance[sorted_idx], align="center")
plt.yticks(pos, np.array(diabetes.feature_names)[sorted_idx])
plt.title("Importância das Características (MDI)")

Plotar a Importância por Permutação

Usaremos o método de permutação para identificar as características mais preditivas.

result = permutation_importance(
    reg, X_test, y_test, n_repeats=10, random_state=42, n_jobs=2
)
sorted_idx = result.importances_mean.argsort()
plt.subplot(1, 2, 2)
plt.boxplot(
    result.importances[sorted_idx].T,
    vert=False,
    labels=np.array(diabetes.feature_names)[sorted_idx],
)
plt.title("Importância por Permutação (conjunto de teste)")
fig.tight_layout()
plt.show()

Resumo

Neste laboratório, utilizamos o Gradient Boosting para construir um modelo preditivo para a tarefa de regressão de diabetes. Carregamos os dados, pré-processamos-os, ajustamos o modelo de regressão e visualizamos os resultados, plotando a desvio de treinamento, a importância das características e a importância por permutação.