Regresión por Gradient Boosting

Machine LearningMachine LearningBeginner
Practicar Ahora

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

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49153{{"Regresión por Gradient Boosting"}} end

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.