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.