Estimaciones out-of-bag del 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

Esta práctica te guiará a través de la implementación de un clasificador de Gradient Boosting con estimaciones Out-of-bag (OOB) utilizando la librería scikit-learn en Python. Las estimaciones OOB son una alternativa a las estimaciones de validación cruzada y se pueden calcular en tiempo real sin necesidad de ajustar el modelo repetidamente. Esta práctica cubrirá los siguientes pasos:

  1. Generar datos
  2. Ajustar el clasificador con estimaciones OOB
  3. Estimar el mejor número de iteraciones utilizando validación cruzada
  4. Calcular el mejor número de iteraciones para los datos de prueba
  5. Graficar los resultados

Consejos sobre la VM

Una vez que se haya iniciado la VM, haz 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 tengas que esperar unos segundos a que Jupyter Notebook termine de cargar. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos rápidamente el problema para ti.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/ensemble("Ensemble Methods") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/model_selection("Model Selection") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/metrics("Metrics") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/ensemble -.-> lab-49151{{"Estimaciones out-of-bag del Gradient Boosting"}} sklearn/model_selection -.-> lab-49151{{"Estimaciones out-of-bag del Gradient Boosting"}} sklearn/metrics -.-> lab-49151{{"Estimaciones out-of-bag del Gradient Boosting"}} sklearn/datasets -.-> lab-49151{{"Estimaciones out-of-bag del Gradient Boosting"}} ml/sklearn -.-> lab-49151{{"Estimaciones out-of-bag del Gradient Boosting"}} end

Generar datos

El primer paso es generar algunos datos de ejemplo que podamos utilizar para entrenar y probar nuestro modelo. Utilizaremos la función make_classification del módulo sklearn.datasets para generar un problema de clasificación binaria aleatoria con 3 características informativas.

import numpy as np
from sklearn.datasets import make_classification

X, y = make_classification(n_samples=1000, n_features=3, n_informative=3,
                           n_redundant=0, n_classes=2, random_state=1)

Ajustar el clasificador con estimaciones OOB

A continuación, crearemos un clasificador de Gradient Boosting con estimaciones OOB utilizando la clase GradientBoostingClassifier del módulo sklearn.ensemble. Estableceremos el número de estimadores en 100 y la tasa de aprendizaje en 0.1.

from sklearn.ensemble import GradientBoostingClassifier

params = {
    "n_estimators": 100,
    "learning_rate": 0.1,
    "subsample": 1.0,
    "max_depth": 3,
    "min_samples_leaf": 1,
    "random_state": 1,
    "oob_score": True
}

clf = GradientBoostingClassifier(**params)
clf.fit(X, y)

Estimar el mejor número de iteraciones utilizando validación cruzada

Podemos estimar el mejor número de iteraciones utilizando validación cruzada. Utilizaremos validación cruzada de 5 pliegues y calcularemos la pérdida logarítmica negativa para cada número de iteraciones.

from sklearn.model_selection import cross_val_score

cv_scores = []
for i in range(1, params['n_estimators'] + 1):
    clf.set_params(n_estimators=i)
    scores = -1 * cross_val_score(clf, X, y, cv=5, scoring='neg_log_loss')
    cv_scores.append(scores.mean())

Calcular el mejor número de iteraciones para los datos de prueba

También podemos calcular el mejor número de iteraciones para los datos de prueba. Calcularemos la pérdida logarítmica negativa para cada número de iteraciones en los datos de prueba.

from sklearn.metrics import log_loss
import matplotlib.pyplot as plt

test_scores = []
for i, y_pred in enumerate(clf.staged_predict_proba(X)):
    score = log_loss(y, y_pred)
    test_scores.append(score)

best_n_estimators = np.argmin(test_scores) + 1

Graficar los resultados

Finalmente, podemos graficar los resultados para visualizar el rendimiento del modelo para diferentes números de iteraciones. Graficaremos la pérdida logarítmica negativa en el eje y y el número de iteraciones en el eje x.

plt.figure(figsize=(10, 5))
plt.plot(range(1, params['n_estimators'] + 1), cv_scores, label='CV')
plt.plot(range(1, params['n_estimators'] + 1), test_scores, label='Test')
plt.axvline(x=best_n_estimators, color='red', linestyle='--')
plt.xlabel('Number of iterations')
plt.ylabel('Negative log-loss')
plt.legend()
plt.show()

Resumen

En este laboratorio, aprendimos cómo implementar un clasificador de Gradient Boosting con estimaciones out-of-bag y estimar el mejor número de iteraciones utilizando validación cruzada. También calculamos el mejor número de iteraciones para los datos de prueba y graficamos los resultados para visualizar el rendimiento del modelo para diferentes números de iteraciones.