XGBoost アルゴリズム - Amazon SageMaker

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

XGBoost アルゴリズム

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

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

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

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

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

SageMaker XGBoost の使用方法

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

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

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

    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", "verbose":"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 フレームワークとしてのXGBoost、を参照 による回帰 Amazon SageMaker XGBoost(ギガバイト)

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

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

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

    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. 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=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})

    get_image_uri 関数で XGBoost バージョンを指定しない場合、デフォルトで XGBoost バージョン 1.0-1 が選択されます。

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

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

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

Amazon 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 形式のラベルが含まれていない場合があります。

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

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

SageMaker XGBoostは、Pythonピックルモジュールを使用してモデルをシリアル化/デシリアライズします。これはモデルの保存/ロードに使用できます。

でトレーニングされたモデルを使用する 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)

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

  • Amazon SageMaker XGBoost では、各インスタンスに重み値を割り当てることで、ラベル付きデータポイントの重要性を区別できます。text/libsvm 入力の場合、顧客がデータインスタンスに重み値を割り当てるには、ラベルの後に重み値を付加します。例えば、 label:weight idx_0:val_0 idx_1:val_1...。 対象: テキスト/csv 顧客は csv_weights にフラグを設定し、ラベルの後に重み値を添付します。たとえば、 と指定します。label,weight,val_0,val_1,...)。

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

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

XGBoost サンプルノートブック

回帰モデルをトレーニングおよびホストする組み込みアルゴリズムとして、Amazon SageMaker XGBoost を使用する方法を示すサンプルノートブックについては、「SageMaker XGBoost アルゴリズムを使用した回帰」を参照してください。Amazon SageMaker でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法については、Amazon SageMaker ノートブックインスタンスの使用を参照してください。ノートブック・インスタンスを作成して開いたら、 SageMaker 例 タブをクリックすると、 Amazon SageMaker サンプル。XGBoost アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[Introduction to Amazon algorithm (Amazon アルゴリズムの概要)] セクションにあります。ノートブックを開くには、その [Use (使用)] タブをクリックして [Create copy (コピーを作成)] を選択します。