Introducción
En este laboratorio, usaremos Gradient Boosting para construir un modelo predictivo para la tarea de regresión de diabetes. Entrenaremos el modelo en el conjunto de datos de diabetes y obtendremos los resultados de sklearn.ensemble.GradientBoostingRegressor con pérdida de mínimos cuadrados y 500 árboles de regresión de profundidad 4.
Consejos sobre la VM
Una vez que se haya iniciado la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.
Cargar los datos
Primero, cargaremos el conjunto de datos de diabetes.
diabetes = datasets.load_diabetes()
X, y = diabetes.data, diabetes.target
Preprocesamiento de datos
A continuación, dividiremos nuestro conjunto de datos para utilizar el 90% para el entrenamiento y dejar el resto para la prueba. También estableceremos los parámetros del modelo de regresión.
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 el modelo de regresión
Ahora iniciaremos los regresores de Gradient Boosting y los ajustaremos con nuestros datos de entrenamiento. Echemos también un vistazo a la error cuadrático medio en los datos de prueba.
reg = ensemble.GradientBoostingRegressor(**params)
reg.fit(X_train, y_train)
mse = mean_squared_error(y_test, reg.predict(X_test))
print("The mean squared error (MSE) on test set: {:.4f}".format(mse))
Graficar la desviación de entrenamiento
Finalmente, visualizaremos los resultados. Para hacer eso, primero calcularemos la desviación del conjunto de prueba y luego la graficaremos en función de las iteraciones de boosting.
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("Desviación")
plt.plot(
np.arange(params["n_estimators"]) + 1,
reg.train_score_,
"b-",
label="Desviación del Conjunto de Entrenamiento",
)
plt.plot(
np.arange(params["n_estimators"]) + 1, test_score, "r-", label="Desviación del Conjunto de Prueba"
)
plt.legend(loc="upper right")
plt.xlabel("Iteraciones de Boosting")
plt.ylabel("Desviación")
fig.tight_layout()
plt.show()
Graficar la importancia de las características
Para este ejemplo, usaremos la importancia de las características basada en la impureza para identificar las características con mayor capacidad predictiva.
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("Importancia de las características (MDI)")
Graficar la importancia de permutación
Usaremos el método de permutación para identificar las características con mayor capacidad predictiva.
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("Importancia de permutación (conjunto de prueba)")
fig.tight_layout()
plt.show()
Resumen
En este laboratorio, usamos Gradient Boosting para construir un modelo predictivo para la tarea de regresión de diabetes. Cargamos los datos, los preprocesamos, ajustamos el modelo de regresión y visualizamos los resultados mediante la representación gráfica de la desviación de entrenamiento, la importancia de las características y la importancia de permutación.