Algoritmo XGBoost - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Algoritmo XGBoost

XGBoost (potenciación del gradiente eXtreme) es una implementación de código abierto popular y eficiente del algoritmo de árboles aumentados de gradientes. La potenciación de gradientes es un algoritmo de aprendizaje supervisado que intenta predecir de forma apropiada una variable de destino mediante la combinación de un conjunto de estimaciones a partir de un conjunto de modelos más simples y más débiles. El algoritmo XGBoost funciona bien en competiciones de aprendizaje automático debido a su manejo robusto de una variedad de tipos de datos, relaciones, distribuciones y la variedad de hiperparámetros que puede ajustar. Puede usar XGBoost para problemas de regresión, de clasificación (binaria y multiclase) y de ranking.

Puede utilizar la nueva versión del algoritmo XGBoost o bien como un algoritmo integrado de Amazon SageMaker o bien como un marco para ejecutar scripts de capacitación en sus entornos locales. Esta implementación ocupa menos espacio de memoria, tiene un mejor registro, una validación de hiperparámetros mejorada y un conjunto ampliado de métricas en comparación con la versión original. También proporciona un estimator de XGBoost que ejecuta un script de entrenamiento en un entorno de XGBoost administrado. La versión actual de SageMaker XGBoost se basa en las versiones originales de XGBoost 0.90, 1.0, 1.2 y 1.3.

Versiones compatibles

  • Modo Framework (código abierto): 0.90-1, 0.90-2, 1.0-1, 1.2-1, 1.2-2, 1.3-1

  • Modo del algoritmo: 0.90-1, 0.90-2, 1.0-1, 1.2-1, 1.2-2, 1.3-1

aviso

La versión de XGBoost 0.90 quedará obsoleta el 31 de diciembre de 2021. Los soportes para actualizaciones de seguridad o correcciones de errores para XgBoost 0.90 se suspenderán después de esta fecha. Es muy recomendable actualizar la versión de XGBoost a una de las versiones más recientes (1.0-1 o posterior) antes de la desaprobación.

nota

XgBoost 1.1 no es compatible con SageMaker porque XGBoost 1.1 tiene una capacidad rota para ejecutar predicciones cuando la entrada de prueba tiene menos características que los datos de entrenamiento en las entradas LIBSVM. Esta capacidad se ha restaurado en XGBoost 1.2. Considere usar SageMaker XGBoost 1.2-2 o posterior.

Cómo utilizar SageMaker XGBoost

Con SageMaker, puede usar XGBoost como algoritmo o marco integrado. Al usar XGBoost como marco, tiene más flexibilidad y acceso a escenarios más avanzados, como la validación cruzada de k iteraciones, ya que puede personalizar sus propios scripts de entrenamiento.

  • Uso de XGBoost como marco de trabajo

    Utilice XGBoost como marco para ejecutar los scripts de entrenamiento personalizados que puedan incorporar procesamiento de datos adicional en sus trabajos de entrenamiento. En el siguiente ejemplo de código, puede encontrar cómo el SDK de Phyton de SageMaker proporciona la API de XGBoost como marco de la misma manera que proporciona otras API de marco, como TensorFlow, MxNet y PyTorch.

    SageMaker Python SDK v1
    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import s3_input, Session # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:linear", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.2-2', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})
    SageMaker Python SDK v2
    import boto3 import sagemaker from sagemaker.xgboost.estimator import XGBoost from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "verbosity":"1", "objective":"reg:linear", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-framework' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework') # construct a SageMaker XGBoost estimator # specify the entry_point to your xgboost training script estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", framework_version='1.2-2', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Para obtener un ejemplo de extremo a extremo del uso de SageMaker XgBoost como marco, consulte el tema sobre regresión con XGBoost de Amazon SageMaker.

  • Utilizar XGBoost como algoritmo integrado

    Utilice el algoritmo integrado XGBoost para crear un contenedor de entrenamiento de XGBoost tal como se muestra en el ejemplo de código siguiente. Puede detectar automáticamente el URI de imagen del algoritmo integrado de XGBoost mediante elimage_uris.retrieveAPI (o laget_image_uriAPI si usaSDK para Python de Amazon SageMakerversión 1). Si desea asegurarse de que la API image_uris.retrieve encuentre el URI correcto, consulte Parámetros comunes para algoritmos integrados y busque xgboost en la lista completa de URI de imagen de algoritmo incorporado y las regiones disponibles.

    Después de especificar el URI de imagen XGBoost, puede utilizar el contenedor XGBoost para construir un estimador con la API Estimator de SageMaker e iniciar un trabajo de entrenamiento. Este modo de algoritmo integrado XGBoost no incorpora su propio script de entrenamiento XGBoost y se ejecuta directamente en los conjuntos de datos de entrada.

    SageMaker Python SDK v1
    import sagemaker import boto3 from sagemaker.amazon.amazon_estimator import get_image_uri from sagemaker.session import s3_input, Session # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = get_image_uri(boto3.Session().region_name, 'xgboost', repo_version='1.2-2') # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_name=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', train_volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = s3_input("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})
    SageMaker Python SDK v2
    import sagemaker import boto3 from sagemaker import image_uris from sagemaker.session import Session from sagemaker.inputs import TrainingInput # initialize hyperparameters hyperparameters = { "max_depth":"5", "eta":"0.2", "gamma":"4", "min_child_weight":"6", "subsample":"0.7", "objective":"reg:squarederror", "num_round":"50"} # set an output path where the trained model will be saved bucket = sagemaker.Session().default_bucket() prefix = 'DEMO-xgboost-as-a-built-in-algo' output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-built-in-algo') # this line automatically looks for the XGBoost image URI and builds an XGBoost container. # specify the repo_version depending on your preference. xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.2-2") # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), instance_count=1, instance_type='ml.m5.2xlarge', volume_size=5, # 5 GB output_path=output_path) # define the data type and paths to the training and validation datasets content_type = "libsvm" train_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'train'), content_type=content_type) validation_input = TrainingInput("s3://{}/{}/{}/".format(bucket, prefix, 'validation'), content_type=content_type) # execute the XGBoost training job estimator.fit({'train': train_input, 'validation': validation_input})

    Para obtener más información acerca de cómo configurar XGBoost como un algoritmo integrado, consulte los siguientes ejemplos de bloc de notas.

Interfaz de entrada/salida para el algoritmo XGBoost

La potenciación de gradientes funciona en los datos tabulares, con las filas que representan observaciones, una columna que representa la variable de destino o la etiqueta, y las columnas restantes que representan las características.

La implementación de SageMaker de XGBoost admite los formatos CSV y libsvm para la capacitación y la inferencia:

  • Para el ContentType de capacitación, las entradas válidas son text/libsvm (predeterminada) o text/csv.

  • Para el ContentType de inferencia, las entradas válidas son text/libsvm (predeterminada) o text/csv.

nota

Para la capacitación de CSV, el algoritmo asume la variable de destino en la primera columna y ese CSV no dispone de un registro de encabezado.

Para la inferencia de CSV, el algoritmo asume que la entrada de CSV no dispone de la columna de etiqueta.

Para la capacitación de libsvm, el algoritmo presupone que la etiqueta está en la primera columna. Las columnas siguientes contienen los pares índice-valor basados en cero para las características. Así pues, cada fila tiene el formato: <label> <index0>:<value0> <index1>:<value1> ... Las solicitudes de inferencia para libsvm pueden tener o no etiquetas con el formato libsvm.

Esto se diferencia de los demás algoritmos de SageMaker que usan el formato de entrada de capacitación protobuf para conservar una mayor coherencia con los formatos de datos de XGBoost estándar.

Para el modo de entrada de capacitación de CSV, la memoria total disponible para el algoritmo (recuento de instancia * la memoria disponible en InstanceType) debe poder almacenar el conjunto de datos de capacitación. Para el modo de entrada de capacitación de libsvm, no es necesario, pero recomendable.

SageMaker XGBoost utiliza el módulo pickle de Python para serializar/deserializar el modelo, que puede utilizarse para guardar/cargar el modelo.

Para usar un modelo capacitado con SageMaker XGBoost en XGBoost de código abierto

  • Utilice el siguiente código de Python:

    import pickle as pkl import tarfile t = tarfile.open('model.tar.gz', 'r:gz') t.extractall() model = pkl.load(open(model_file_path, 'rb')) # prediction with test data pred = model.predict(dtest)

Para diferenciar la importancia de los puntos de datos etiquetados utilice los soportes de ponderación de instancias

  • SageMaker XGBoost de permite a los clientes diferenciar la importancia de los puntos de datos etiquetados asignando a cada instancia un valor de ponderación. Para la entrada text/libsvm, los clientes pueden asignar valores de ponderación a las instancias de datos añadiéndolos después de las etiquetas. Por ejemplo, label:weight idx_0:val_0 idx_1:val_1.... Para la entrada text/csv, los clientes deben activar la marca csv_weights en los parámetros y asociar los valores de ponderación en la columna después de las etiquetas. Por ejemplo: label,weight,val_0,val_1,...).

Recomendación de instancias EC2 para el algoritmo XGBoost

SageMaker XGBoost 1.0-1 o anterior solo realiza la capacitación actualmente mediante CPU. Se trata de un algoritmo de vinculación de memoria (como se opone en la vinculación de computación). Por lo tanto, una instancia de computación de uso general (por ejemplo, M5) es una opción mejor que una instancia optimizada de computación (por ejemplo, C4). Además, recomendamos que disponga de suficiente memoria en total en las instancias seleccionadas para almacenar los datos de capacitación. Aunque admite el uso del espacio en disco para administrar datos que no encajan en la memoria principal (la función no principal disponible con el modo de entrada libsvm), la escritura de los archivos en la memoria caché en el disco ralentizan el tiempo de procesamiento del algoritmo.

SageMaker XGBoost versión 1.2 o versiones posteriores admite la formación con GPU de instancia única. A pesar de que los costos por instancia son superiores, la capacitación de las GPU se realiza de forma más rápida, por lo que son más rentables. Para aprovechar la formación de GPU, especifique el tipo de instancia como una de las instancias de GPU (por ejemplo, P3) y establezca la propiedadtree_methodHiperparámetro agpu_histen su script XgBoost existente. Actualmente, SageMaker no admite la capacitación de varias GPU.

Blocs de notas de muestra de XGBoost

La siguiente tabla describe una variedad de cuadernos de muestra que abordan diferentes casos de uso del algoritmo XGBoost de Amazon SageMaker.

Cuaderno de notas Descripción

¿Cómo crear un contenedor XGBoost personalizado?

Este cuaderno le muestra cómo crear un contenedor XGBoost personalizado con la transformación Batch de Amazon SageMaker.

Introducción al procesamiento de funciones, formación e inferencia

Este bloc de notas le muestra cómo crear una canalización de Machine Learning (ML) utilizando transformadores de función Spark y realizar una inferencia en tiempo real mediante la transformación Batch de Amazon SageMaker.

Regresión con XGBoost usando Parquet

Este cuaderno muestra cómo utilizar el conjunto de datos Abalone en Parquet para entrenar un modelo XGBoost.

¿Cómo entrenar y alojar un modelo de clasificación multiclase?

Este bloc de notas muestra cómo utilizar el dataset MNIST para entrenar y alojar un modelo de clasificación multiclase.

¿Cómo entrenar un Modelo para Predicción de Churn del Cliente?

Este cuaderno le muestra cómo entrenar a un modelo para predecir la salida del cliente móvil en un esfuerzo por identificar a los clientes descontentos.

Introducción a la infraestructura gestionada de Amazon SageMaker para XGBoost Training

Este bloc de notas le muestra cómo usar instancias puntuales para entrenar con un contenedor XGBoost.

¿Cómo usar Amazon SageMaker Debugger para depurar XGBoost Training Jobs?

Este bloc de notas muestra cómo utilizar Amazon SageMaker Debugger para supervisar los trabajos de formación y detectar incoherencias.

¿Cómo usar Amazon SageMaker Debugger para depurar XGBoost Training Jobs en tiempo real?

Este bloc de notas muestra cómo utilizar el conjunto de datos MNIST y el depurador de Amazon SageMaker para realizar análisis en tiempo real de los trabajos de formación de XGBoost mientras se ejecutan los trabajos de formación.

Para obtener instrucciones sobre cómo crear y obtener acceso a instancias de bloc de notas de Jupyter que puede utilizar para ejecutar el ejemplo en SageMaker, consulteUso de instancias de Amazon SageMaker Notebooks. Una vez que haya creado y abierto una instancia de bloc de notas, elija la opciónEjemplos de SageMakerPara ver una lista de todas las muestras de SageMaker Examples. Los blocs de notas de modelado de ejemplos que utilizan los algoritmos de aprendizaje lineal se encuentran en la sección de introducción a algoritmos de Amazon. Para abrir un bloc de notas, elija su pestaña Use (Usar) y elija Create copy (Crear copia).