XGBoost アルゴリズム - Amazon SageMaker

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

XGBoost アルゴリズム

XGBoost (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムで、より単純で弱いモデルのセットから推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試行します。XGBoost アルゴリズムは、さまざまなデータ型、関係、分布、および微調整できるさまざまなハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。XGBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

XGBoost アルゴリズムの新しいリリースは、Amazon SageMaker 組み込みアルゴリズムとして、またはローカル環境でトレーニングスクリプトを実行するフレームワークとして使用できます。この実装では、元のバージョンよりも、メモリのフットプリントは縮小し、ロギングは強化され、ハイパーパラメータ検証は向上し、メトリクスセットは拡張されています。マネージド型の XGBoost 環境でトレーニングスクリプトを実行する XGBoost estimator も提供されています。現在のリリースの SageMaker XGBoost は、XGBoost の元のバージョン 0.90、1.0、1.2 をベースにしています。

サポートされるバージョン

  • フレームワーク(オープンソース)モード:0.90-1、0.90-2、1.0-1、1.2-1

  • アルゴリズムモード: 0.90-1、0.90-2、1.0-1、1.2-1

注記

XgBoost 1.1 は SageMaker ではサポートされていません。XgBoost 1.1 では、テスト入力のフィーチャが LIBSVM 入力のトレーニングデータよりも少ない場合に、予測を実行する機能が壊れているためです。この機能は XgBoost 1.2 で復元されました。SageMaker XGBoost 1.2-1の使用を検討してください。

SageMaker XGBoost の使用方法

SageMaker では、組み込みのアルゴリズムまたはフレームワークとして XGBoost を使用できます。XGBoost をフレームワークとして使用することで、独自のトレーニングスクリプトをカスタマイズできるため、柔軟性が高まり、K 分割交差検証などのより高度なシナリオを利用できるようになります。

  • XGBoost をフレームワークとして使用する

    XGBoost をフレームワークとして使用して、追加のデータ処理をトレーニングジョブに組み込むことができるカスタマイズされたトレーニングスクリプトを実行します。次のコード例では、SageMaker Python SDK が、TensorFlow、MXNet、PyTorch などの他のフレームワーク API を提供するのと同じ方法で、どのように XGBoost API をフレームワークとして提供しているかがわかります。

    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-1', hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), train_instance_count=1, train_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-1', 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})

    フレームワークとして SageMaker XGBoost を使用するエンドツーエンドの例については、「Amazon SageMaker XGBoost を使用した回帰」を参照してください。

  • XGBoost を組み込みアルゴリズムとして使用する

    次のコード例に示すように、XGBoost 組み込みアルゴリズムを使用して、XGBoost トレーニングコンテナを構築します。SageMaker を使用して、XGBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。image_uris.retrieveAPI (またはget_image_uriAPI を使用する場合はAmazon SageMaker Python SDKバージョン 1)。image_uris.retrieve API で正しい URI が検出されるかどうかを確認する場合は、「組み込みアルゴリズムの共通パラメータ」を参照し、組み込みアルゴリズムイメージ URI と使用可能なリージョンの詳細なリストから xgboost を参照します。

    XGBoost イメージ URI を指定した後、XGBoost コンテナを使用することで、SageMaker Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。この XGBoost 組み込みアルゴリズムモードでは、独自の XGBoost トレーニングスクリプトは組み込まれず、入力データセット上で直接実行されます。

    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-1') # construct a SageMaker estimator that calls the xgboost-container estimator = sagemaker.estimator.Estimator(image_name=xgboost_container, hyperparameters=hyperparameters, role=sagemaker.get_execution_role(), train_instance_count=1, train_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-1") # 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})

    XGBoost を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。

XGBoost アルゴリズムの入出力インターフェイス

勾配ブースティングは表形式のデータで動作し、行が観測値、1 つの列がターゲット変数またはラベル、残りの列が特徴を表します。

XGBoost の SageMaker 実装では、トレーニングと推論に CSV 形式と libsvm 形式が対応しています。

  • トレーニング ContentType の場合、有効な入力は text/libsvm (デフォルト) または text/csv です。

  • 推論 ContentType の場合、有効な入力は text/libsvm (デフォルト) または text/csv です。

注記

CSV トレーニングの場合、アルゴリズムはターゲット変数が最初の列にあり、CSV にはヘッダーレコードがないと見なします。

CSV 推論の場合、アルゴリズムは CSV 入力にラベル列がないと見なします。

libsvm トレーニングの場合、アルゴリズムはラベルが最初の列にあると見なします。後続の列には、特徴のゼロベースのインデックス値のペアが含まれています。そのため、各行は <label> <index0>:<value0> <index1>:<value1> ... の形式になります。libsvm の推論リクエストには、libsvm 形式のラベルが含まれていない場合があります。

これは、標準の XGBoost データ形式とより一貫性を保つためにトレーニングの入力にプロトコルバッファー形式を使用する、SageMaker の他のアルゴリズムとは異なります。

CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント * InstanceType で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。libsvm トレーニング入力モードの場合、これは必須ではありませんが推奨されます。

SageMaker XGBoost は Python の pickle モジュールを使用してモデルをシリアル化/逆シリアル化し、それをモデルの保存/ロードに使用できます。

SageMaker XGBoost でトレーニングされたモデルをオープンソースの XGBoost で使用するには

  • 次の Python コードを使用します。

    import pickle as pkl import tarfile import xgboost 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)

ラベル付きデータポイントの重要性を区別するには、インスタンス重みサポートを使用します。

  • SageMaker XGBoost では、各インスタンスに重み値を割り当てることで、ラベル付きデータポイントの重要性を区別できます。text/libsvm 入力の場合、顧客がデータインスタンスに重み値を割り当てるには、ラベルの後に重み値を付加します。例:label:weight idx_0:val_0 idx_1:val_1...text/csv 入力の場合、顧客はパラメータで csv_weights フラグをオンにし、その列でラベルの後に重み値を付加する必要があります。次に例を示します。label,weight,val_0,val_1,...).

XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項

SageMaker XGBoost 1.0-1 以前では、現在、CPU を使用したトレーニングのみ行うことができます。これは (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C4 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。メインメモリに収まらないデータについてはディスク容量を使用できますが (libsvm 入力モードで利用できる out-of-core 機能)、ディスクにキャッシュファイルを書き込むとアルゴリズムの処理速度が低下します。

SageMaker XgBoost バージョン 1.2 以降では、単一インスタンスの GPU トレーニングがサポートされています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。GPU トレーニングを利用するには、GPU インスタンスの 1 つとしてインスタンスタイプを指定し(P3 など)、tree_methodハイパーパラメータgpu_histを既存の XgBoost スクリプトで使用します。SageMaker は現在、Multi-GPU トレーニングをサポートしていません。

XGBoost サンプルノートブック

次の表は、Amazon SageMaker XgBoost アルゴリズムのさまざまなユースケースに対応するさまざまなサンプルノートブックの概要を示しています。

ノートブックのタイトル 説明

カスタムXgBoostコンテナを作成するには?

このノートブックでは、Amazon SageMaker Batch 変換を使用してカスタム XGBoost コンテナを構築する方法について説明します。

フィーチャー処理、トレーニング、推論の入門

このノートブックでは、Spark フィーチャートランスフォーマーを使用してMachine Learning (ML) パイプラインを構築する方法と、Amazon SageMaker Batch 変換を使用してリアルタイム推論を行う方法について説明します。

寄木細工を使用した XgBoost での回帰

このノートブックでは、寄木細工の Abawone データセットを使用して XGBoost モデルをトレーニングする方法について説明します。

マルチクラス分類モデルをトレーニングしてホストする方法

このノートブックでは、MNIST データセットを使用して、マルチクラス分類モデルをトレーニングおよびホストする方法について説明します。

顧客解約予測のモデルを訓練する方法は?

このノートブックでは、不幸な顧客を特定するために、モバイル顧客の出発を予測するモデルをトレーニングする方法について説明します。

XGBoost トレーニングのための Amazon SageMaker マネージドスポットインフラストラクチャの紹介

このノートブックでは、スポットインスタンスを使用して XGBoost コンテナを使用したトレーニングを行う方法について説明します。

Amazon SageMaker デバッガを使用して XGBoost トレーニングジョブをデバッグする方法は?

このノートブックでは、Amazon SageMaker デバッガーを使用してトレーニングジョブを監視して不一致を検出する方法を示します。

Amazon SageMaker デバッガを使用して XgBoost トレーニングジョブをリアルタイムでデバッグする方法は?

このノートブックでは、MNIST データセットと Amazon SageMaker デバッガーを使用して、トレーニングジョブの実行中に XGBoost トレーニングジョブのリアルタイム分析を実行する方法について説明します。

SageMaker でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法については、」を参照してください。Amazon SageMaker ノートブックインスタンスを使用する。ノートブックインスタンスを作成して開いた後、[SageMaker サンプル] タブをクリックして、すべての SageMaker サンプルのリストを表示します。線形学習者アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[Introduction to Amazon algorithm (Amazon アルゴリズムの概要)] セクションにあります。ノートブックを開くには、その [Use (使用)] タブを選択し、[Create copy (コピーを作成)] を選択します。