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 と 1.3 をベースにしています。

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

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

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

警告

XGBoost バージョン 0.90 は 2021 年 12 月 31 日に廃止されます。XGBoost 0.90 のセキュリティアップデートまたはバグ修正のサポートは、この日付後に終了します。廃止する前に、XGBoost バージョンを新しいバージョン (1.0-1 以降) にアップグレードすることを強くお勧めします。

警告

SageMaker Python SDK v1はXGBoostのバージョン1.0-1まで対応している。XGBoost のそれ以降のバージョンでは SageMaker Python SDK v2. 詳細については、「からの変更」を参照してください。SDK v1 から SDK v2

注記

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

使用方法 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.0-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-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})

    Aの場合 end-to-end の使用例 SageMaker XGBoost をフレームワークとして、「」を参照してください。Amazon での回帰の回帰 SageMaker XGBoost

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

    次のコード例に示すように、XGBoost 組み込みアルゴリズムを使用して、XGBoost トレーニングコンテナを構築します。XGBoost 組み込みアルゴリズムイメージ URI は、 SageMaker image_uris.retrieveAPI(またはget_image_uriAPI を使用する場合アマゾン 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.0-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-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})

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

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

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

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

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

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

注記

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

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

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

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

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

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

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

  • 次の 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)

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

  • 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 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。メインメモリに収まらないデータについてはディスク容量を使用できますが ( out-of-core libsvm 入力モードで利用できる)、ディスクにキャッシュファイルを書き込むとアルゴリズムの処理速度が低下します。

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

XGBoost サンプルノートブック

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

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

カスタム XGBoost コンテナを作成する方法

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

Parquet を使用した XGBoost での回帰

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

複数クラス分類モデルをトレーニングおよびホストする方法

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

顧客解約の予測に対するモデルをトレーニングする方法

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

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

このノートブックでは、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 (コピーを作成)] を選択します。