

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

# 表形式データ用の組み込みの SageMaker AI アルゴリズム
<a name="algorithms-tabular"></a>

Amazon SageMaker AI は、表形式データの分析に合わせて調整された組み込みアルゴリズムを提供します。表形式データとは、行 (観測値) と列 (特徴量) で構成される表にまとめられたデータセットを指します。表形式データ用の組み込み SageMaker AI アルゴリズムは、分類問題と回帰問題のどちらにも使用できます。
+ [AutoGluon-Tabular](autogluon-tabular.md) — モデルをアンサンブルして複数のレイヤーに積み重ねることで成功するオープンソースの AutoML フレームワーク。
+ [CatBoost](catboost.md) - 順序付けされたブースティングとカテゴリ別機能を処理するための革新的なアルゴリズムを導入する勾配ブーストツリーアルゴリズムの実装。
+ [因数分解機アルゴリズム](fact-machines.md) - 高次元スパースデータセット内の特徴間の相互作用を経済的にキャプチャするように設計された線形モデルの拡張。
+ [K 最近傍 (k-NN) アルゴリズム](k-nearest-neighbors.md) - K 個の最も近いラベル付きポイントを使用して分類用の新しいデータポイントにラベルを割り当てるか、回帰用の K 近接ポイントの平均から予測ターゲット値を割り当てるノンパラメトリック手法。
+ [LightGBM](lightgbm.md) — 効率とスケーラビリティを向上させるための 2 つの新しい技法を追加した勾配ブーストツリーアルゴリズムの実装: Gradient-based One-Side Sampling (GOSS) と Exclusive Feature Bundling (EFB)。
+ [線形学習アルゴリズム](linear-learner.md) - 回帰の線形関数または分類の線形しきい値関数を学習します。
+ [TabTransformer](tabtransformer.md) — セルフアテンションベースの Transformers で構築された、新しい深層表形式データモデル化アーキテクチャ。
+ [Amazon SageMaker AI の XGBoost アルゴリズム](xgboost.md) - より単純で弱いモデルのセットから推定のアンサンブルを組み合わせる勾配ブーストツリーアルゴリズムの実装。


| アルゴリズム名 | チャンネル名 | トレーニング入力モード | ファイルタイプ | インスタンスクラス | 並列処理可能 | 
| --- | --- | --- | --- | --- | --- | 
| AutoGluon - 表形式 | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU または GPU (単一インスタンスのみ) | なし | 
| CatBoost | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU (単一インスタンスのみ) | なし | 
| 因数分解機 | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf | CPU (高密度データ用の GPU) | あり | 
| K 近傍 (k-NN) | トレーニングおよび (オプションで) テスト | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU (1 つ以上のインスタンス上の単一の GPU デバイス) | あり | 
| LightGBM | トレーニング、および (オプションで) 検証 | ファイル | CSV | CPU (単一インスタンスのみ) | なし | 
| 線形学習 | トレーニングおよび (オプションで) 検証、テスト、またはその両方 | ファイルまたはパイプ | recordIO-protobuf または CSV | CPU または GPU | あり | 
| TabTransformer | トレーニングおよび (オプションで) 検証 | ファイル | CSV | CPU または GPU (単一インスタンスのみ) | なし | 
| XGBoost (0.90-1、0.90-2、1.0-1、1.2-1、1.2-21) | トレーニング、および (オプションで) 検証 | ファイルまたはパイプ | CSV、libsVM、または Parquet | CPU (または 1.2-1 の場合 GPU) | あり | 

# AutoGluon-Tabular
<a name="autogluon-tabular"></a>

[AutoGluon-Tabular](https://auto.gluon.ai/stable/index.html) は、未処理の表形式データセットで高精度の機械学習モデルをトレーニングする、人気のあるオープンソースの AutoML フレームワークです。主にモデルとハイパーパラメータの選択に焦点を当てている既存の AutoML フレームワークとは異なり、AutoGluon-Tabular は複数のモデルをアンサンブルして複数のレイヤーに積み重ねることで成功しています。このページには、AutoGluon-Tabular の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI AutoGluon-Tabular の使用方法
<a name="autogluon-tabular-modes"></a>

AutoGluon-Tabular は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker Python SDK で AutoGluon-Tabular を使用する方法について説明します。Amazon SageMaker Studio Classic UI から AutoGluon-Tabular を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **AutoGluon-Tabular を組み込みアルゴリズムとして使用する**

  次のコード例に示すように、AutoGluon-Tabular 組み込みアルゴリズムを使用して、AutoGluon-Tabular トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、AutoGluon-Tabular 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  AutoGluon-Tabular イメージ URI を指定した後、AutoGluon-Tabular コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。AutoGluon-Tabular の組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトが提供されているので、置き換える必要はありません。スクリプトモードを使用して SageMaker トレーニングジョブを作成した経験が豊富な場合は、独自の AutoGluon-Tabular トレーニングスクリプトを組み込むことができます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "autogluon-classification-ensemble", "*", "training"
  training_instance_type = "ml.p3.2xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_binary/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "auto_stack"
  ] = "True"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  AutoGluon-Tabular を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。これらの例で使用される S3 バケットは、それらを実行するために使用されるノートブックインスタンスと同じ AWS リージョンに存在する必要があります。
  + [Tabular classification with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Classification_AutoGluon.ipynb)
  + [Tabular regression with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Regression_AutoGluon.ipynb)

# AutoGluon-Tabular アルゴリズムの入出力インターフェイス
<a name="InputOutput-AutoGluon-Tabular"></a>

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

SageMaker AI の AutoGluon-Tabular の実装では、トレーニングと推論に CSV 形式が対応しています:
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

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

**トレーニングデータ、検証データ、カテゴリ別特徴の入力形式**

AutoGluon-Tabular モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。トレーニングデータと検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`training` と `validation` チャネルの両方を使用して入力データを提供します。`training` チャネルだけを使用することもできます。

**`training` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `training` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、S3 プレフィックスまたは 1 つの特定の CSV ファイルを指すフル S3 パスです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列に存在する必要があります。検証データは、各ブースティング反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`training` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`training` チャネルのみを使用する**。

別の方法として、`training` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスが指すディレクトリには、1 つの CSV ファイルを保持する `training/` という名前のサブディレクトリが含まれている必要があります。オプションで、1 つの CSV ファイルを保持する `validation/` という名前の別のサブディレクトリを同じ場所に含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

SageMaker AI AutoGluon-Tabular は `autogluon.tabular.TabularPredictor` モジュールを使用してモデルをシリアル化/逆シリアル化し、それをモデルの保存/ロードに使用できます。

**SageMaker AI AutoGluon-Tabular でトレーニングしたモデルを AutoGluon フレームワークで使用するには**
+ 次の Python コードを使用します。

  ```
  import tarfile
  from autogluon.tabular import TabularPredictor
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = TabularPredictor.load(model_file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## AutoGluon-Tabular アルゴリズムの Amazon EC2 インスタンス推奨
<a name="Instance-AutoGluon-Tabular"></a>

SageMaker AI AutoGluon-Tabular は、単一インスタンスの CPU と単一インスタンスの GPU トレーニングをサポートしています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。GPU トレーニングを利用するには、インスタンスタイプを GPU インスタンスの 1 つ (P3 など) として指定します。現在、SageMaker AI AutoGluon-Tabular ではマルチ GPU トレーニングはサポートされていません。

## AutoGluon-Tabular のサンプルノートブック
<a name="autogluon-tabular-sample-notebooks"></a>

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


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Classification_AutoGluon.ipynb)  |  このノートブックでは、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムを使用して表形式の分類モデルをトレーニングしホストする方法について説明します。  | 
|  [Tabular regression with Amazon SageMaker AI AutoGluon-Tabular algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/autogluon_tabular/Amazon_Tabular_Regression_AutoGluon.ipynb)  |  このノートブックでは、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムを使用して表形式の回帰モデルをトレーニングしホストする方法について説明します。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# AutoGluon-Tabular の仕組み
<a name="autogluon-tabular-HowItWorks"></a>

AutoGluon-Tabular は、高度なデータ処理、深層学習、およびマルチレイヤーモデルアンサンブルメソッドを実行します。各列のデータ型を自動的に認識し、テキストフィールドの特別な処理を含む堅牢なデータ前処理を行います。

AutoGluon は、既製のブーストツリーからカスタマイズされたニューラルネットワークまで、さまざまなモデルに対応します。これらのモデルは斬新な方法でアンサンブルされています。モデルは複数のレイヤーに積み重ねられ、レイヤーごとにトレーニングされるため、raw データを一定の時間的制約内で高品質な予測に変換できます。このプロセスでは、分割されていない例を注意深く追跡しながらデータをさまざまな方法で分割することで、オーバーフィットが軽減されます。

AutoGluon-Tabular アルゴリズムは、さまざまなデータ型、関係、分布を堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。AutoGluon-Tabular は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

マルチレイヤースタッキング戦略の仕組みを示す次の図を参照してください。

![\[AutoGluon のマルチレイヤースタッキング戦略は、2 つのスタッキングレイヤーで示されています。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/autogluon_tabular_illustration.png)


詳細については、「*[AutoGluon-Tabular: Robust and Accurate AutoML for Structured Data](https://arxiv.org/pdf/2003.06505.pdf)*」を参照してください。

# AutoGluon-Tabular ハイパーパラメータ
<a name="autogluon-tabular-hyperparameters"></a>

次の表には、Amazon SageMaker AI AutoGluon-Tabular アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI AutoGluon-Tabular アルゴリズムは、オープンソースの [AutoGluon-Tabular](https://github.com/awslabs/autogluon) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[AutoGluon-Tabular のサンプルノートブック](autogluon-tabular.md#autogluon-tabular-sample-notebooks) のサンプルデータセットに基づいています。

デフォルトでは、SageMaker AI AutoGluon-Tabular アルゴリズムは分類問題のタイプに基づいて評価メトリクスを自動的に選択します。このアルゴリズムは、データ内のラベル数に基づいて分類問題のタイプを検出します。回帰問題の場合、評価メトリクスは二乗平均平方根誤差です。二項分類問題の場合、評価メトリクスは受信者操作特性曲線 (AUC) の下面積です。多クラス分類問題の場合、評価メトリクスは精度です。`eval_metric` ハイパーパラメータを使用して、デフォルトの評価メトリクスを変更できます。説明、有効値、デフォルト値など、AutoGluon-Tabular ハイパーパラメータの詳細については、以下の表を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| eval\$1metric |  検証データの評価メトリクス。`eval_metric` がデフォルトの `"auto"` 値に設定されている場合、アルゴリズムは分類問題のタイプに基づいて自動的に評価メトリクスを選択します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/autogluon-tabular-hyperparameters.html) 有効な値: 文字列、有効な値については、「[AutoGluon documentation](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)」を参照してください。 デフォルト値: `"auto"`。  | 
| presets |  `fit()` 内のさまざまな引数のプリセット設定のリスト。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/autogluon-tabular-hyperparameters.html) 詳細については、「[AutoGluon Predictors](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)」を参照してください。 有効な値: 文字列、(`"best_quality"`、`"high_quality"`、`good_quality"`、`"medium_quality"`、`"optimize_for_deployment"`、` or "interpretable"`) のいずれか。 デフォルト値: `"medium_quality"`。  | 
| auto\$1stack |  AutoGluon が予測精度を上げるために、バギングとマルチレイヤースタックアンサンブルを自動的に利用すべきかどうか。予測精度を最大化するために、トレーニング時間が長くなっても構わない場合は、`auto_stack` を `"True"` に設定してください。これにより、データセットのプロパティに基づいて `num_bag_folds` と `num_stack_levels` 引数が自動的に設定されます。 有効な値: 文字列、`"True"` または `"False"` デフォルト値: `"False"`。  | 
| num\$1bag\$1folds |  モデルのバギングに使用されるフォールド数。`num_bag_folds` が `k` に等しい場合、トレーニング時間はおよそ `k` 倍増加します。`num_bag_folds` を 0 に設定するとバギングが無効になります。デフォルトでは無効になっていますが、予測パフォーマンスを最大化するために 5～10 の間の値を使用することをお勧めします。`num_bag_folds` を大きくすると、バイアスは低くなりますが、オーバーフィットが発生しやすいモデルになります。1 はこのパラメータでは無効な値で、`ValueError` が発生します。10 より大きい値ではリターンが減少する可能性があり、オーバーフィットによって全体的な結果に悪影響が及ぶことさえあります。予測をさらに改善するには、`num_bag_folds` を増やさず、代わりに `num_bag_sets` を増やします。 有効な値: 文字列、および `"0"` から `"10"` までの間の任意の整数。 デフォルト値: `"0"`。  | 
| num\$1bag\$1sets |  実行する kfold バギングの繰り返し回数 (値は 1 以上でなければなりません)。バギング中にトレーニングされるモデルの総数は `num_bag_folds` \$1 `num_bag_sets` と等しくなります。`time_limit` が指定されていない場合、このパラメータのデフォルトは 1 です。`num_bag_folds` が指定されていない場合、このパラメータは無効になります。値が 1 より大きいと、特に小さな問題やスタッキングが有効になっている場合に、予測パフォーマンスが向上します。 有効な値: 整数、範囲: [`1`, `20`]。 デフォルト値: `1`。  | 
| num\$1stack\$1levels |  スタックアンサンブルで使用するスタッキングレベルの数。モデルのトレーニング時間が約 `num_stack_levels` \$11 倍増加します。このパラメータを 0 に設定すると、スタックアンサンブルが無効になります。このパラメータはデフォルトでは無効になっていますが、予測パフォーマンスを最大化するために 1～3 の値を使用することをお勧めします。オーバーフィットや `ValueError` を防ぐために、`num_bag_folds` は 2 以上でなければなりません。 有効な値: 浮動小数点数、範囲: [`0`, `3`]。 デフォルト値: `0`。  | 
| refit\$1full |  通常のトレーニング手順の後、すべてのデータ (トレーニングと検証) ですべてのモデルに再トレーニングを行うかどうか。詳細については、「[AutoGluon Predictors](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.html)」を参照してください。 有効な値: 文字列、`"True"` または `"False"`。 デフォルト値: `"False"`。  | 
| set\$1best\$1to\$1refit\$1full |  予測子が予測に使用するデフォルトのモデルを変更するかどうか。`set_best_to_refit_full` を `"True"` に設定すると、デフォルトのモデルは、(`refit_full` によって有効化される) 再適合の結果として検証スコアが最も高いモデルに変更されます。`refit_full` が設定されている場合のみ有効です。 有効な値: 文字列、`"True"` または `"False"`。 デフォルト値: `"False"`。  | 
| save\$1space |  新しいデータの予測に必要のない補助モデルファイルを削除して、予測変数のメモリとディスクサイズを削減するかどうか。これは推論精度には影響しません。トレーニング済みモデルを予測に使用することが唯一の目的である場合は、`save_space` を `"True"` に設定することをお勧めします。`save_space` を `"True"` に設定すると、一部の高度な機能が使用できなくなる場合があります。詳細については、「`[predictor.save\$1space()](https://auto.gluon.ai/stable/api/autogluon.tabular.TabularPredictor.save_space.html)` ドキュメント」を参照してください。 有効な値: 文字列、`"True"` または `"False"`。 デフォルト値: `"False"`。  | 
| verbosity |  印刷メッセージの冗長性。`verbosity` レベルは `0`～`4` で、レベルが高いほど、印刷ステートメントはより詳細になります。`verbosity` を `0` にすると警告を抑制します。 有効な値: 整数、(`0`、`1`、`2`、`3`、または `4`) のいずれか。 デフォルト値: `2`。  | 

# AutoGluon-Tabular モデルの調整
<a name="autogluon-tabular-tuning"></a>

AutoGluon-Tabular はモデル調整にも使用できますが、その設計ではスタッキング手法とアンサンブル手法を使用して優れたパフォーマンスを発揮できるため、ハイパーパラメータの最適化は不要です。AutoGluon-Tabular は、モデルの調整に重点を置くのではなく、モデルを複数のレイヤーに積み重ねてレイヤーごとにトレーニングすることで成功しています。

AutoGluon-Tabular ハイパーパラメータの詳細については、「[AutoGluon-Tabular ハイパーパラメータ](autogluon-tabular-hyperparameters.md)」を参照してください。

# CatBoost
<a name="catboost"></a>

[CatBoost](https://catboost.ai/) は、勾配ブースティング決定ツリー (GBDT) アルゴリズムの簡単かつ費用効果の高いオープンソース実装です。GBDT はより単純でより弱いモデルの集合から得られた推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試みる、教師あり学習アルゴリズムです。

CatBoost は GBDT に次の 2 つの重要なアルゴリズムの進歩をもたらします。

1. 従来のアルゴリズムに代わる順列駆動型の、順序付けされたブースティングの実装

1. カテゴリ別特徴を処理するための革新的なアルゴリズム

どちらの手法も、現在存在する勾配ブーストアルゴリズムの実装すべてに存在する、特殊なターゲットリークによって引き起こされる予測シフトに対処するために作成されました。このページには、CatBoost の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI CatBoost の使用方法
<a name="catboost-modes"></a>

CatBoost は Amazon SageMaker AI に組み込まれているアルゴリズムとして使用できます。次のセクションでは、SageMaker Python SDK で CatBoost を使用する方法について説明します。Amazon SageMaker Studio Classic UI から CatBoost を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **CatBoost を組み込みアルゴリズムとして使用する**

  次のコード例に示すように、CatBoost 組み込みアルゴリズムを使用して、CatBoost トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、CatBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  CatBoost イメージ URI を指定した後、CatBoost コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。CatBoost の組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトが提供されているので、置き換える必要はありません。スクリプトモードを使用して SageMaker トレーニングジョブを作成した経験が豊富な場合は、独自の CatBoost トレーニングスクリプトを組み込むことができます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "catboost-classification-model", "*", "training"
  training_instance_type = "ml.m5.xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_multiclass/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "iterations"
  ] = "500"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  CatBoost を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
  + [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)
  + [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)

# CatBoost アルゴリズムの入出力インターフェイス
<a name="InputOutput-CatBoost"></a>

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

SageMaker AI の CatBoost の実装では、トレーニングと推論に CSV 形式が対応しています。
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

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

**トレーニングデータ、検証データ、カテゴリ別特徴の入力形式**

CatBoost モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。トレーニングデータと検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`training` と `validation` チャネルの両方を使用して入力データを提供します。`training` チャネルだけを使用することもできます。

**`training` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `training` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、1 つ以上の CSV ファイルを指す S3 プレフィックスか、1 つの特定の CSV ファイルを指すフル S3 パスのいずれかです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列にある必要があります。`training` または `validation` チャネルに複数の CSV ファイルが提供された場合、CatBoost アルゴリズムはファイルを連結します。検証データは、各ブースティングの反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルまたはファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`training` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`training` チャネルのみを使用する**。

別の方法として、`training` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスは、1 つ以上の CSV ファイルを含む `training/` という名前のサブディレクトリを持つディレクトリを指す必要があります。オプションで、同じ場所に 1 つ以上の CSV ファイルを含む `validation/` という別のサブディレクトリを含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

SageMaker AI CatBoost は `catboost.CatBoostClassifier` および `catboost.CatBoostRegressor` モジュールを使用してモデルをシリアル化/逆シリアル化し、それをモデルの保存/ロードに使用できます。

**SageMaker AI CatBoost でトレーニングしたモデルを `catboost` で使用する**
+ 次の Python コードを使用します。

  ```
  import tarfile
  from catboost import CatBoostClassifier
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  file_path = os.path.join(model_file_path, "model")
  model = CatBoostClassifier()
  model.load_model(file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## CatBoost アルゴリズムの Amazon EC2 インスタンス推奨
<a name="Instance-CatBoost"></a>

現在、SageMaker AI CatBoost では CPU を使用したトレーニングのみを行っています。CatBoost は (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C5 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。

## CatBoost サンプルノートブック
<a name="catboost-sample-notebooks"></a>

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


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)  |  このノートブックでは、Amazon SageMaker AI CatBoost アルゴリズムを使用して表形式の分類モデルをトレーニングしホストする方法について説明します。  | 
|  [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)  |  このノートブックでは、Amazon SageMaker AI CatBoost アルゴリズムを使用して表形式の回帰モデルをトレーニングしホストする方法について説明します。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# CatBoost の仕組み
<a name="catboost-HowItWorks"></a>

CatBoost は従来の勾配ブースティング決定ツリー (GBDT) アルゴリズムを実装しており、次の 2 つの重要なアルゴリズムの進歩が追加されています。

1. 従来のアルゴリズムに代わる順列駆動型の、順序付けされたブースティングの実装

1. カテゴリ別特徴を処理するための革新的なアルゴリズム

どちらの手法も、現在存在する勾配ブーストアルゴリズムの実装すべてに存在する、特殊なターゲットリークによって引き起こされる予測シフトに対処するために作成されました。

CatBoost アルゴリズムは、さまざまなデータ型、関係、分布、および微調整できるさまざまなハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。CatBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

勾配ブーストの詳細については、「[SageMaker AI XGBoost アルゴリズムの仕組み](xgboost-HowItWorks.md)」を参照してください。CatBoost メソッドで使用される追加の GOSS および EFB 手法の詳細については、[「CatBoost: unbiased boosting with categorical features](https://arxiv.org/pdf/1706.09516.pdf)」を参照してください。

# CatBoost のハイパーパラメータ
<a name="catboost-hyperparameters"></a>

次の表には、Amazon SageMaker AI CatBoost アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI CatBoost アルゴリズムは、オープンソースの [CatBoost](https://github.com/catboost/catboost) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[CatBoost サンプルノートブック](catboost.md#catboost-sample-notebooks) のサンプルデータセットに基づいています。

デフォルトでは、SageMaker AI CatBoost アルゴリズムは分類問題のタイプに基づいて評価指標と損失関数を自動的に選択します。CatBoost アルゴリズムは、データ内のラベル数に基づいて分類問題のタイプを検出します。回帰問題の場合、評価メトリクスと損失関数はどちらも二乗平均平方根誤差です。二項分類問題の場合、評価メトリクスは曲線下面積 (AUC) で、損失関数は対数損失です。多クラス分類問題の場合、評価メトリクスと損失関数はマルチクラスの交差エントロピーになります。`eval_metric` ハイパーパラメータを使用して、デフォルトの評価メトリクスを変更できます。説明、有効値、およびデフォルト値など、LightGBM ハイパーパラメータの詳細については、次の表を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| iterations |  構築できるツリーの最大数。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `500`。  | 
| early\$1stopping\$1rounds |  ある検証データポイントの 1 つのメトリクスが最後の `early_stopping_rounds` ラウンドで改善されない場合、トレーニングは停止します。`early_stopping_rounds` が 0 以下の場合、このハイパーパラメータは無視されます。 有効な値: 整数。 デフォルト値: `5`。  | 
| eval\$1metric |  検証データの評価メトリクス。`eval_metric` がデフォルトの `"auto"` 値に設定されている場合、アルゴリズムは分類問題のタイプに基づいて自動的に評価メトリクスを選択します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/catboost-hyperparameters.html) 有効な値: 文字列、有効な値については、「[CatBoost documentation](https://catboost.ai/en/docs/references/eval-metric__supported-metrics)」を参照してください。 デフォルト値: `"auto"`。  | 
| learning\$1rate |  トレーニング例の各バッチを完了した後に、モデルの重みが更新されるレート。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.009`。  | 
| depth |  ツリーの深さです。 有効な値: 整数、範囲: (`1`,`16`)。 デフォルト値: `6`。  | 
| l2\$1leaf\$1reg |  コスト関数の L2 正則化項の係数。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `3`。  | 
| random\$1strength |  ツリー構造を選択したときに、スコアリングの分割に使用するランダム性の量。このパラメータを使用すると、モデルがオーバーフィットするのを防ぐことができます。 有効な値: 浮動小数点、範囲: 正の浮動小数点数。 デフォルト値: `1.0`。  | 
| max\$1leaves |  生成されるツリーのリーフの最大数。`"Lossguide"` 成長ポリシーでのみ使用できます。 有効な値: 整数、範囲: (`2`,`64`)。 デフォルト値: `31`。  | 
| rsm |  ランダム部分空間法。特徴量をランダムに選択し直す場合に、分割選択ごとに使用する特徴量の割合。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `1.0`。  | 
| sampling\$1frequency |  ツリーを構築する際にウェイトやオブジェクトをサンプリングする頻度。 有効な値: 文字列、(`"PerTreeLevel"` または `"PerTree"`) のいずれか。 デフォルト値: `"PerTreeLevel"`。  | 
| min\$1data\$1in\$1leaf |  リーフ内のトレーニングサンプルの最小数。CatBoost は、サンプル数が指定値より少ないリーフでは新しい分割を検索しません。`"Lossguide"` および `"Depthwise"` 成長ポリシーでのみ使用できます。 有効な値: 整数、範囲: (`1` または `∞`)。 デフォルト値: `1`。  | 
| bagging\$1temperature |  ベイズブートストラップの設定を定義します。ベイズブートストラップを使用して、オブジェクトにランダムなウェイトを割り当てます。`bagging_temperature` が `1.0` に設定されている場合、重みは指数分布からサンプリングされます。`bagging_temperature` を `0.0` に設定すると、すべての重みは 1.0 になります。 有効な値: 浮動小数点、範囲: 負以外の浮動小数点数。 デフォルト値: `1.0`。  | 
| boosting\$1type |  ブースティングスキーム。「自動」とは、`boosting_type` が処理ユニットの種類、トレーニングデータセット内のオブジェクト数、選択した学習モードに基づいて選択されることを意味します。 有効な値: 文字列、(`"Auto"`, `"Ordered"`, `"Plain"`) のいずれかです。 デフォルト値: `"Auto"`。  | 
| scale\$1pos\$1weight |  二項分類における正のクラスのウェイト。この値は、正のクラスのオブジェクトのウェイトの乗数として使用されます。 有効な値: 浮動小数点、範囲: 正の浮動小数。 デフォルト値: `1.0`。  | 
| max\$1bin |  数値機能の分割数です。`"Auto"` は `max_bin` が処理ユニットのタイプやその他のパラメータに基づいて選択されることを意味します。詳細については、CatBoost のドキュメントを参照してください。 有効な値: 文字列、(`"Auto"` または `"1"` から `"65535"` までの整数の文字列) のいずれか。 デフォルト値: `"Auto"`。  | 
| grow\$1policy |  ツリー成長ポリシー。貪欲なツリー構造の実行方法を定義します。 有効な値: 文字列、(`"SymmetricTree"`、`"Depthwise"` または `"Lossguide"`) のいずれか。 デフォルト値: `"SymmetricTree"`。  | 
| random\$1seed |  トレーニングに使用するランダムシード。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `1.0`。 | 
| thread\$1count |  トレーニング中に使用するスレッド数。`thread_count` が `-1` の場合、スレッド数はプロセッサコアの数と等しくなります。`0` を `thread_count` にすることはできません。 有効な値: 整数、(`-1` または正の整数) のいずれか。 デフォルト値: `-1`。  | 
| verbose |  印刷メッセージの冗長性です。レベルが高いほど、印刷ステートメントはより詳細になります。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `1`。  | 

# CatBoost モデルの調整
<a name="catboost-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**モデル調整では、以下のハイパーパラメータに重点が置かれます。

**注記**  
学習損失関数は、ラベル列の一意の整数の数によって決まる分類タスクの種類に基づいて自動的に割り当てられます。詳細については、「[CatBoost のハイパーパラメータ](catboost-hyperparameters.md)」を参照してください。
+ モデルトレーニング中に最適化する学習損失関数
+ 検証中にモデルのパフォーマンスを評価するための評価指標
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
CatBoost の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## CatBoost アルゴリズムで計算される評価メトリクス
<a name="catboost-metrics"></a>

SageMaker AI CatBoost アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。評価メトリクスは、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| RMSE | 二乗平均平方根誤差 | 最小化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MAE | 平均絶対誤差 | 最小化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MedianAbsoluteError | 平均絶対誤差 | 最小化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| R2 | r2 スコア | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Logloss | 二項交差エントロピー | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Precision | precision | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Recall | リコール | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| F1 | f1 スコア | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| AUC | auc スコア | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| MultiClass | マルチクラス交差エントロピー | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| Accuracy | 正確性 | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 
| BalancedAccuracy | バランスのとれた精度 | 最大化 | "bestTest = ([0-9\$1\$1.]\$1)" | 

## 調整可能な CatBoost ハイパーパラメータ
<a name="catboost-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して CatBoost モデルを調整します。CatBoost のメトリクスに最も影響を与えるハイパーパラメータは、`learning_rate`、`depth`、`l2_leaf_reg` および `random_strength` です。すべての CatBoost ハイパーパラメータのリストについては、「[CatBoost のハイパーパラメータ](catboost-hyperparameters.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001、MaxValue: 0.01 | 
| depth | IntegerParameterRanges | MinValue: 4、MaxValue: 10 | 
| l2\$1leaf\$1reg | IntegerParameterRanges | MinValue: 2、MaxValue: 10 | 
| random\$1strength | ContinuousParameterRanges | MinValue: 0、MaxValue: 10 | 

# 因数分解機アルゴリズム
<a name="fact-machines"></a>

因数分解機アルゴリズムは、分類タスクと回帰タスクの両方に使用できる汎用的な教師あり学習アルゴリズムです。これは、高次元スパースデータセット内の特徴間の相互作用を経済的にキャプチャするように設計された線形モデルの拡張です。例えばクリック予測システムでは、因数分解機モデルは、特定の広告カテゴリの広告が特定のページカテゴリのページに配置されたときに確認されたクリック率パターンをキャプチャできます。因数分解機は、クリック予測や項目推奨など、高次元スパースデータセットを処理するタスクに適した選択肢です。

**注記**  
因数分解機の Amazon SageMaker AI 実装では、特徴間のペアワイズ (2 次) 相互作用のみを考慮します。

**Topics**
+ [因数分解機アルゴリズムの入出力インターフェイス](#fm-inputoutput)
+ [因数分解機アルゴリズムの EC2 インスタンスの推奨事項](#fm-instances)
+ [因数分解機サンプルノートブック](#fm-sample-notebooks)
+ [因数分解機の仕組み](fact-machines-howitworks.md)
+ [因数分解機のハイパーパラメータ](fact-machines-hyperparameters.md)
+ [因数分解機モデルを調整する](fm-tuning.md)
+ [因数分解機のレスポンス形式](fm-in-formats.md)

## 因数分解機アルゴリズムの入出力インターフェイス
<a name="fm-inputoutput"></a>

因数分解機アルゴリズムは、二項分類モードまたは回帰モードで実行できます。各モードで、データセットをトレーニングチャネルデータセットと共に**テスト**チャネルに提供できます。スコアリングは、使用するモードによって異なります。回帰モードでは、テストデータセットは二乗平均平方根誤差 (RMSE) を使用してスコアリングされます。二項分類モードでは、テストデータセットは二項交差エントロピー (対数損失)、精度 (しきい値 = 0.5) および F1 スコア (しきい値 = 0.5) を使用してスコアリングされます。

**トレーニング**については、因数分解機アルゴリズムは、現在 `Float32` テンソルの `recordIO-protobuf` 形式でのみサポートしています。ユースケースは主にスパースデータに対するものであるため、`CSV` は適切な候補ではありません。recordIO でラップされた protobuf では、ファイルモードとパイプモードの両方のトレーニングがサポートされます。

**推論**については、因数分解機アルゴリズムは `application/json` 形式と `x-recordio-protobuf` 形式をサポートします。
+ **バイナリ分類**の問題については、アルゴリズムは、スコアとラベルを予測します。ラベルは、数値で、`0` または `1` になります。スコアは、ラベルが `1` があるべきであるとアルゴリズムがみなす度合いを示す数値です。アルゴリズムは最初にスコアを計算し、次にスコア値からラベルを導出します。スコアが 0.5 以上である場合、ラベルは `1` です。
+ **回帰**の問題については、スコアのみが返り、それが予測値になります。たとえば、因数分解器が映画の評価の予測に使用されている場合、スコアは予測された評価値を示します。

トレーニングファイルと推論ファイルの形式の詳細については、[因数分解機サンプルノートブック](#fm-sample-notebooks)を参照してください。

## 因数分解機アルゴリズムの EC2 インスタンスの推奨事項
<a name="fm-instances"></a>

Amazon SageMaker AI の因数分解機アルゴリズムは高スケーラブルであり、分散型インスタンスでトレーニングできます。スパースデータセットと高密度データセットの両方に CPU インスタンスでのトレーニングと推論をお勧めします。状況によっては、高密度データに対する 1 つ以上の GPU でのトレーニングに利点がある場合があります。GPU でのトレーニングは高密度データでのみ使用できます。スパースデータには CPU インスタンスを使用してください。因数分解機アルゴリズムは、トレーニングと推論用に P2、P3、G4dn、G5 インスタンスをサポートします。

## 因数分解機サンプルノートブック
<a name="fm-sample-notebooks"></a>

SageMaker AI 因数分解機学習アルゴリズムを使用して MNIST データセット内の 0～9 の手書き数字のイメージを分析するサンプルノートブックについては、「[An Introduction to Factorization Machines with MNIST](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/factorization_machines_mnist/factorization_machines_mnist.html)」を参照してください。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。NTM アルゴリズムを使うトピックモデリングのサンプルノートブックは、**[Introduction to Amazon Algorithms]** (Amazon アルゴリズムの概要) セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# 因数分解機の仕組み
<a name="fact-machines-howitworks"></a>

因数分解機モデルの予測タスクは、特徴セット xi からターゲットドメインに対する関数 ŷ を推定することです。このドメインは、回帰の場合は実数値であり、分類の場合は二項です。因数分解機モデルは教師ありモデルであるため、使用可能なトレーニングデータセット (xii,yj) があります。このモデルが示す利点は、ペアワイズ特徴相互作用をキャプチャするために因数分解パラメータ化を使用する方法にあります。これは数学的には次のように表すことができます。

![\[因数分解機モデルの方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM1.jpg)


 この方程式の 3 つの項は、それぞれモデルの 3 つの要素に対応します。
+ w0 項は、グローバルバイアスを表します。
+ wi 線形項は、i 番目の変数の強度をモデル化したものです。
+ 因数分解項 <vi,vj> は、i 番目と j 番目の変数間のペアワイズ相互作用をモデル化したものです。

グローバルバイアス項と線形項は線形モデルの場合と同じです。ペアワイズ特徴相互作用は、各特徴について学習された対応する係数の内積として第 3 項でモデル化されます。学習された係数は、各特徴の埋め込みベクトルと考えることもできます。たとえば、分類タスクでは、特徴のペアが正のラベルの付いたサンプルで同時に発生する傾向がある場合、それらの係数の内積は大きくなります。つまり、それらの埋め込みベクトルはコサイン類似度で相互に近くなります。因数分解機モデルの詳細については、「[Factorization Machines」(因数分解機](https://www.ismll.uni-hildesheim.de/pub/pdfs/Rendle2010FM.pdf)) を参照してください。

回帰タスクの場合、モデル予測 ŷn とターゲット値 yn の間の二乗誤差を最小化することによってモデルをトレーニングします。これは二乗損失と呼ばれます。

![\[二乗損失の方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM2.jpg)


分類タスクの場合、対数損失とも呼ばれる交差エントロピー損失を最小化することによってモデルをトレーニングします。

![\[対数損失の方程式のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM3.jpg)


各パラメータの意味は次のとおりです。

![\[予測値のロジスティック関数のイメージ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/FM4.jpg)


分類のための損失関数の詳細については、[Loss functions for classification (分類のための損失関数)](https://en.wikipedia.org/wiki/Loss_functions_for_classification) を参照してください。

# 因数分解機のハイパーパラメータ
<a name="fact-machines-hyperparameters"></a>

次のテーブルに、因数分解機アルゴリズムのハイパーパラメータを示します。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。


| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim | 入力特徴空間の次元。これはスパース入力では非常に高くなることがあります。 **必須** 有効な値: 正の整数。推奨値の範囲: [10000,10000000]  | 
| num\$1factors | 因数分解の次元。 **必須** 有効な値: 正の整数。推奨値の範囲: [2,1000]。通常、64 が良好な結果を生成し、開始点として推奨されます。  | 
| predictor\$1type | 予測子のタイプ。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **必須** 有効な値: 文字列: `binary_classifier` または `regressor`  | 
| bias\$1init\$1method | バイアス項の初期化方法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **オプション** 有効な値: `uniform`、`normal`、または `constant` デフォルト値: `normal`  | 
| bias\$1init\$1scale | バイアス項の初期化の範囲。`bias_init_method` が `uniform` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| bias\$1init\$1sigma | バイアス項の初期化の標準偏差。`bias_init_method` が `normal` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.01  | 
| bias\$1init\$1value | バイアス項の初期値。`bias_init_method` が `constant` に設定されている場合に有効です。 **オプション** 有効な値: 浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| bias\$1lr | バイアス項の学習レート。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.1  | 
| bias\$1wd | バイアス項の重み減衰。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.01  | 
| clip\$1gradient | 勾配クリッピングオプティマイザパラメータ。区間 [-`clip_gradient`, \$1`clip_gradient`] に投影することで勾配をクリップします。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし  | 
| epochs | 実行するトレーニングエポックの数。 **オプション** 有効な値: 正の整数 デフォルト値： 1  | 
| eps | 0 による除算を回避するための Epsilon パラメータ。 **オプション** 有効な値: 浮動小数点数。推奨値: small。 デフォルト値: なし  | 
| factors\$1init\$1method | 因数分解項の初期化方法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **オプション** 有効な値: `uniform`、`normal`、または `constant` デフォルト値: `normal`  | 
| factors\$1init\$1scale  | 因数分解項の初期化の範囲。`factors_init_method` が `uniform` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| factors\$1init\$1sigma | 因数分解項の初期化の標準偏差。`factors_init_method` が `normal` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.001  | 
| factors\$1init\$1value | 因数分解項の初期値。`factors_init_method` が `constant` に設定されている場合に有効です。 **オプション** 有効な値: 浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| factors\$1lr | 因数分解項の学習レート。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.0001  | 
| factors\$1wd | 因数分解項の重み減衰。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.00001  | 
| linear\$1lr | 線形項の学習レート。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.001  | 
| linear\$1init\$1method | 線形項の初期化方法。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/fact-machines-hyperparameters.html) **オプション** 有効な値: `uniform`、`normal`、または `constant` デフォルト値: `normal`  | 
| linear\$1init\$1scale | 線形項の初期化の範囲。`linear_init_method` が `uniform` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| linear\$1init\$1sigma | 線形項の初期化の標準偏差。`linear_init_method` が `normal` に設定されている場合に有効です。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.01  | 
| linear\$1init\$1value | 線形項の初期値。`linear_init_method` が *constant* に設定されている場合に有効です。 **オプション** 有効な値: 浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: なし  | 
| linear\$1wd | 線形項の重み減衰。 **オプション** 有効な値: 負以外の浮動小数点数。推奨値の範囲: [1e-8, 512]。 デフォルト値: 0.001  | 
| mini\$1batch\$1size | トレーニングに使用されるミニバッチのサイズ。 **オプション** 有効な値: 正の整数 デフォルト値: 1000  | 
| rescale\$1grad |  勾配再スケーリングオプティマイザパラメータ。設定されている場合、更新前に勾配を `rescale_grad` で乗算します。多くの場合、1.0/`batch_size` として選択されます。 **オプション** 有効な値: 浮動小数点数 デフォルト値: なし  | 

# 因数分解機モデルを調整する
<a name="fm-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## 因数分解機アルゴリズムによって計算されたメトリクス
<a name="fm-metrics"></a>

因数分解機アルゴリズムには、二項分類と回帰予測子の両方のタイプがあります。自動モデル調整に使用できるメトリクスは、予測子タイプによって決まります。アルゴリズムは、トレーニング中に計算される `test:rmse` 回帰メトリクスを報告します。回帰タスク用にモデルを調整するときには、このメトリクスを目標として選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:rmse | 二乗平均平方根誤差 | 最小化 | 

因数分解機アルゴリズムは、トレーニング中に計算される 3 つの二項分類メトリクスをレポートします。二項分類タスクのモデルを調整するときには、目標としてこれらのいずれかを選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:binary\$1classification\$1accuracy | 正解率 | 最大化 | 
| test:binary\$1classification\$1cross\$1entropy | 交差エントロピー | 最小化 | 
| test:binary\$1f\$1beta | Beta | 最大化 | 

## 調整可能な因数分解機ハイパーパラメータ
<a name="fm-tunable-hyperparameters"></a>

因数分解機アルゴリズムの次のハイパーパラメータを調整できます。バイアス、線形、および因数分解の項を含む初期化パラメータは、それらの初期化方法に応じて異なります。初期化方法は、`uniform`、`normal`、`constant` の 3 つです。これらの初期化方法は、それ自体が調整可能なのではありません。調整可能なパラメータは、どの初期化方法を選択したかによって異なります。たとえば、初期化方法が `uniform` である場合は、`scale` パラメータのみが調整可能です。具体的には、`bias_init_method==uniform` の場合は、`bias_init_scale`、`linear_init_scale`、および `factors_init_scale` が調整可能です。同様に、初期化方法が `normal` である場合は、`sigma` パラメータのみが調整可能です。初期化方法が `constant` である場合は、`value` パラメータのみが調整可能です。これらの依存関係を、次の表にリストしてあります。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 依存関係 | 
| --- | --- | --- | --- | 
| bias\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==uniform | 
| bias\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==normal | 
| bias\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==constant | 
| bias\$1lr | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| bias\$1wd | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| epoch | IntegerParameterRange | MinValue: 1、MaxValue: 1000 | なし | 
| factors\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==uniform | 
| factors\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==normal | 
| factors\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==constant | 
| factors\$1lr | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| factors\$1wd | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512] | なし | 
| linear\$1init\$1scale | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==uniform | 
| linear\$1init\$1sigma | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==normal | 
| linear\$1init\$1value | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | bias\$1init\$1method==constant | 
| linear\$1lr | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| linear\$1wd | ContinuousParameterRange | MinValue: 1e-8、MaxValue: 512 | なし | 
| mini\$1batch\$1size | IntegerParameterRange | MinValue: 100、MaxValue: 10000 | なし | 

# 因数分解機のレスポンス形式
<a name="fm-in-formats"></a>

Amazon SageMaker AI には、JSON、JSONLINES、RECORDIO などの因数分解機モデルから推論を取得するためのいくつかのレスポンス形式があります。構造は二項分類タスクとリグレッションタスクでそれぞれ固有となります。

## JSON レスポンスの形式
<a name="fm-json"></a>

二項分類

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

リグレッション

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## JSONLINES レスポンスの形式
<a name="fm-jsonlines"></a>

二項分類

```
{"score": 0.4, "predicted_label": 0}
```

リグレッション

```
{"score": 0.4}
```

## RECORDIO レスポンスの形式
<a name="fm-recordio"></a>

二項分類

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

リグレッション

```
[
    Record = {
        features = {},
        label = {
            'score’: {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```

# K 最近傍 (k-NN) アルゴリズム
<a name="k-nearest-neighbors"></a>

Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムは、インデックスベースのアルゴリズムです。このアルゴリズムは、分類または回帰にノンパラメトリック手法を使用します。分類問題の場合、アルゴリズムはサンプルポイントに最も近い *k* ポイントに対してクエリを実行し、そのクラスで最も頻繁に使用されるラベルを予測ラベルとして返します。回帰問題の場合、アルゴリズムはサンプルポイントに最も近い *k* ポイントに対してクエリを実行し、それらの特徴値の平均を予測値として返します。

k-NN アルゴリズムを使用したトレーニングには、サンプリング、次元削減、およびインデックス構築の 3 つのステップがあります。サンプリングによって、初期データセットがメモリに収まるように、そのサイズが縮小されます。次元削減の場合、アルゴリズムはデータの特徴次元を削減して、メモリ内の k-NN モデルのフットプリントと推論レイテンシーを減らします。ランダムプロジェクションと高速 Johnson-Lindenstrauss 変換の 2 つの次元削減手法が用意されています。通常、高次元 (d > 1000) のデータセットには次元削減を使用して、「次元の呪い」を回避します。次元の呪いとは、次元数が増加するにつれてスパースが進み、データの統計分析が困難になるという現象です。k-NN のトレーニングの主な目標は、インデックスを構築することです。このインデックスを使用すると、値またはクラスラベルがまだ判別されていないポイントと、推論に使用する k 近傍ポイントとの間の距離を効率的に検索できます。

**Topics**
+ [k-NN アルゴリズムの入出力インターフェイス](#kNN-input_output)
+ [k-NN サンプルノートブック](#kNN-sample-notebooks)
+ [k-NN アルゴリズムの仕組み](kNN_how-it-works.md)
+ [k-NN アルゴリズムの EC2 インスタンスに関する推奨事項](#kNN-instances)
+ [k-NN ハイパーパラメータ](kNN_hyperparameters.md)
+ [k-NN モデルの調整](kNN-tuning.md)
+ [k-NN トレーニング入力のデータ形式](kNN-in-formats.md)
+ [k-NN リクエストとレスポンスの形式](kNN-inference-formats.md)

## k-NN アルゴリズムの入出力インターフェイス
<a name="kNN-input_output"></a>

SageMaker AI k-NN は、トレーニングとテストのデータチャネルをサポートします。
+ サンプリングして k-NN インデックスに構築するデータには、*トレーニングチャネル*を使用します。
+ ログファイルにスコアを出力するには、*テストチャネル*を使用します。スコアはミニバッチごとに 1 行で表示され、`classifier` については精度、`regressor` については平均二乗誤差 (mse) のスコアが表示されます。

トレーニング入力の場合、k-NN は `text/csv` および `application/x-recordio-protobuf` データ形式をサポートします。入力タイプが `text/csv` の場合は、最初の `label_size` 列が、その行のラベルベクトルとして解釈されます。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについてモデルをトレーニングできます。

推論入力の場合、k-NN は `application/json`、`application/x-recordio-protobuf`、および `text/csv` データ形式をサポートします。`text/csv` 形式は、`label_size` およびエンコーディングパラメータを受け入れます。`label_size` は 0 であり、UTF-8 エンコーディングであることが想定されます。

推論出力の場合、k-NN は `application/json` および `application/x-recordio-protobuf` データ形式をサポートします。これら 2 つのデータ形式は冗長出力モードもサポートします。冗長出力モードでは API は、最小から最大までソートされた距離ベクトルと、ラベルベクトル内の対応する要素を使用して、検索結果を提供します。

バッチ変換の場合、k-NN は入力と出力の両方で `application/jsonlines` データ形式をサポートします。入力例は次のとおりです。

```
content-type: application/jsonlines

{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

出力例は次のとおりです。

```
accept: application/jsonlines

{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

入力および出力ファイル形式の詳細については、[k-NN トレーニング入力のデータ形式](kNN-in-formats.md) (トレーニングの場合)、[k-NN リクエストとレスポンスの形式](kNN-inference-formats.md) (推論の場合は)、および[k-NN サンプルノートブック](#kNN-sample-notebooks)を参照してください。

## k-NN サンプルノートブック
<a name="kNN-sample-notebooks"></a>

SageMaker AI K 最近傍アルゴリズムを使用して地質データおよび林野データから原野の植生タイプを予測するサンプルノートブックについては、「[K-Nearest Neighbor Covertype](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/k_nearest_neighbors_covtype/k_nearest_neighbors_covtype.html)」を参照してください。

Jupyter ノートブックインスタンスを使用して、SageMaker AI の例を実行します。SageMaker AI で Jupyter ノートブックインスタンスを作成して開く方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。「**Introduction to Amazon algorithms (Amazon アルゴリズムの概要)**」セクションで、K-Nearest Neighbor ノートブックを検索します。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

# k-NN アルゴリズムの仕組み
<a name="kNN_how-it-works"></a>

Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムは、入力データのサンプリング、次元削減の実行、インデックスの構築を含む、マルチステップのトレーニングプロセスに従います。その後、インデックス化されたデータを推論時に使用して、特定のデータポイントの K 個の最近傍を効率的に検出し、隣接するラベルまたは値に基づいて予測を行います。

## ステップ 1: サンプリングする
<a name="step1-k-NN-sampling"></a>

トレーニングデータセットからサンプリングするデータポイントの総数を指定するには、`sample_size` パラメータを使用します。たとえば、初期データセットに 1,000 個のデータポイントがあり、`sample_size` が 100 に設定されている場合 (インスタンスの総数は 2)、各ワーカーは 50 ポイントをサンプリングします。合計 100 個のデータポイントが収集されます。サンプリングはデータポイントの数を基準に線形時間で実行されます。

## ステップ 2: 次元削減を実行する
<a name="step2-kNN-dim-reduction"></a>

k-NN アルゴリズムの現在の実装には、2 つの次元削減手法が用意されています。手法を指定するには、`dimension_reduction_type` ハイパーパラメータを使用します。`sign` 法は、ランダム符号の行列を用いる線形射影を使用するランダム射影を指定します。一方、`fjlt` 法は、フーリエ変換に基づく手法である高速 Johnson-Lindenstrauss 変換を指定します。どちらの方法でも L2 と内積距離は保持されます。`fjlt`法は、標的次元が大きく、CPU 推論でパフォーマンスが優れている場合に使用する必要があります。これらの手法は、計算の複雑性が異なります。`sign` 法は、次元 d の n 個のポイントのバッチの次元を標的次元 k に縮小するために O(ndk) 時間を必要とします。`fjlt` 法は O(nd log(d)) 時間を必要としますが、関係する定数はより大きくなります。次元削減を使用すると、データにノイズが入り、このノイズが予測精度を低下させる可能性があります。

## ステップ 3: インデックスを構築する
<a name="step3-kNN-build-index"></a>

推論中に、アルゴリズムはサンプルポイントの K 近傍についてインデックスに対してクエリを実行します。ポイントへの参照に基づいて、アルゴリズムは分類または回帰予測を行います。提供されたクラスラベルまたは値に基づいて予測を行います。k-NN は、フラットインデックス、逆インデックス、および直積量子化を使用する逆インデックスの 3 タイプのインデックスを提供します。このタイプは `index_type` パラメータで指定します。

## モデルをシリアル化する
<a name="kNN-model-serialization"></a>

k-NN アルゴリズムはトレーニングを終了すると、推論に備えて 3 つのファイルをシリアル化します。
+ model\$1algo-1: 最近傍を計算するためのシリアル化されたインデックスを含みます。
+ model\$1algo-1.labels: インデックスからのクエリ結果に基づいて予測ラベルを計算するためのシリアル化ラベル (np.float32 バイナリ形式) を含みます。
+ model\$1algo-1.json: 推論のためにトレーニングから取得した `k` および `predictor_type` ハイパーパラメータを他の関連する状態とともに保存する、JSON 形式のモデルメタデータを含みます。

k-NN の現在の実装では、メタデータファイルを修正して予測の計算方法を変更できます。たとえば、`k` を 10 に変更したり、`predictor_type` を *regressor* に変更したりできます。

```
{
  "k": 5,
  "predictor_type": "classifier",
  "dimension_reduction": {"type": "sign", "seed": 3, "target_dim": 10, "input_dim": 20},
  "normalize": False,
  "version": "1.0"
}
```

## k-NN アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="kNN-instances"></a>

CPU インスタンス (ml.m5.2xlarge など) または GPU インスタンスでトレーニングすることをお勧めします。k-NN アルゴリズムは、トレーニングと推論用の P2、P3、G4dn、G5 GPU インスタンスファミリーをサポートします。

GPU ハードウェアを使用すると、CPU から GPU への通信に負担がかかるため、通常、CPU からの推論リクエストは GPU からのリクエストよりも平均レイテンシーが短くなります。ただし、GPU は一般的にバッチサイズが大きいほどスループットが高くなります。

# k-NN ハイパーパラメータ
<a name="kNN_hyperparameters"></a>

次の表に、Amazon SageMaker AI K 最近傍 (k-NN) アルゴリズムで設定できるハイパーパラメータを示します。


| Parameter Name | 説明 | 
| --- | --- | 
| feature\$1dim |  入力データ内の特徴の数。 **必須** 有効な値: 正の整数。  | 
| k |  最近傍の数。 **必須** 有効な値: 正の整数  | 
| predictor\$1type |  データラベルに使用する推論のタイプ。 **必須** 有効な値: 分類の場合は *classifier*、回帰の場合は *regressor*。  | 
| sample\$1size |  トレーニングデータセットからサンプリングされるデータポイントの数。 **必須** 有効な値: 正の整数  | 
| dimension\$1reduction\$1target |  縮小後の標的次元。 `dimension_reduction_type` パラメータを指定する場合に**必須**です。 有効な値: 0 より大きく、`feature_dim` より小さい正の整数。  | 
| dimension\$1reduction\$1type |  次元削減手法のタイプ。 **オプション** 有効な値: ランダム射影の場合は *sign* 、高速 Johnson-Lindenstrauss 変換の場合は *fjlt*。 デフォルト値: 次元削減なし  | 
| faiss\$1index\$1ivf\$1nlists |  `index_type` が *faiss.IVFFlat* または *faiss.IVFPQ* である場合に、インデックス内で作成する重心の数。 **オプション** 有効な値: 正の整数 デフォルト値: *auto* (`sqrt(sample_size)` に解決される)。  | 
| faiss\$1index\$1pq\$1m |  `index_type` が *faiss.IVFPQ* に設定されている場合に、インデックス内で作成するベクトルサブコンポーネントの数。 FaceBook AI 類似検索 (FAISS) ライブラリでは、`faiss_index_pq_m` の値がデータ次元の約数であることが必要です。`faiss_index_pq_m` がデータ次元の約数でない場合は、データ次元を `faiss_index_pq_m` で割り切れる最小の整数に増やします。次元削減が適用されない場合、アルゴリズムはゼロのパディングを追加します。次元削減が適用される場合、アルゴリズムは `dimension_reduction_target` ハイパーパラメータの値を大きくします。 **オプション** 有効な値: 次の正の整数の 1 つ：1、2、3、4、8、12、16、20、24、28、32、40、48、56、64、96  | 
| index\$1metric |  最近傍を見つけるときにポイント間の距離を測定するためのメトリクス。`index_type` を `faiss.IVFPQ` に設定してトレーニングする場合、`INNER_PRODUCT` 距離と `COSINE` 類似度はサポートされません。 **オプション** 有効な値: ユークリッド距離の場合は *L2*、内積距離の場合は *INNER\$1PRODUCT*、余弦類似度の場合は *COSINE*。 デフォルト値: *L2*  | 
| index\$1type |  インデックスのタイプ。 **オプション** 有効な値: *faiss.Flat*、*faiss.IVFFlat*、*faiss.IVFPQ*。 デフォルト値: *faiss.Flat*  | 
| mini\$1batch\$1size |  データイテレーターのミニバッチごとの観測数。 **オプション** 有効な値: 正の整数 デフォルト値: 5000  | 

# k-NN モデルの調整
<a name="kNN-tuning"></a>

Amazon SageMaker AI K 最近傍アルゴリズムは、教師ありアルゴリズムです。このアルゴリズムはテストデータセットを消費し、分類タスクの精度または回帰タスクの平均二乗誤差に関するメトリクスを出力します。これらの精度メトリクスは、それぞれのタスクについてのモデル予測を経験的テストデータによって提供されるグランドトゥルースと比較します。テストデータセットで最高の精度または最低の誤差を報告する最善のモデルを見つけるには、k-NN のハイパーパラメータ調整ジョブを実行します。

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムの予測タスクに適した目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。ハイパーパラメータは、モデルパラメータの推定を支援する目的でのみ使用され、予測を行うためにトレーニングされたモデルでは使用されません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## k-NN アルゴリズムによって計算されたメトリクス
<a name="km-metrics"></a>

k 最近傍アルゴリズムは、`predictor_type` ハイパーパラメータで指定されたタスクのタイプに応じて、トレーニング中に次の表の 2 つのメトリクスのいずれかを計算します。
+ *classifier* は分類タスクを指定し、`test:accuracy` を計算します。
+ *regressor* は回帰タスクを指定し、`test:mse` を計算します。

モデルを調整するときに、関連する目標メトリクスを計算するために実行されるタスクのタイプに適した `predictor_type` 値を選択してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:accuracy |  `predictor_type` が *classifier* に設定されている場合、k-NN は、K 最近傍のラベルの平均に基づいて予測されたラベルを、テストチャネルデータで提供されたグランドトゥルースラベルと比較します。報告される精度は、0.0 (0%) ～ 1.0 (100%) の範囲です。  |  最大化  | 
| test:mse |  `predictor_type` が *regressor* に設定されている場合、k-NN は、K 最近傍のラベルの平均に基づいて予測されたラベルを、テストチャネルデータで提供されたグランドトゥルースラベルと比較します。平均二乗誤差は、2 つのラベルを比較することによって計算されます。  |  最小化  | 



## 調整可能な k-NN ハイパーパラメータ
<a name="km-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して Amazon SageMaker AI K 最近傍モデルを調整します。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| k |  IntegerParameterRanges  |  MinValue: 1、MaxValue: 1024  | 
| sample\$1size |  IntegerParameterRanges  |  MinValue: 256、MaxValue: 20000000  | 

# k-NN トレーニング入力のデータ形式
<a name="kNN-in-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Training](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-training.html)」で説明されている一般的な入力トレーニング形式に従います。このトピックでは、SageMaker AI K 最近傍アルゴリズムで利用可能な入力形式をリストします。

## CSV データ形式
<a name="kNN-training-data-csv"></a>

content-type: text/csv; label\$1size=1

```
4,1.2,1.3,9.6,20.3
```

最初の `label_size` 列が、その行のラベルベクトルとして解釈されます。

## recordIO データ形式
<a name="kNN-training-data-recordio"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {
            'values': {
                values: [1.2, 1.3, 9.6, 20.3]  # float32
            }
        },
        label = {
            'values': {
                values: [4]  # float32
            }
        }
    }
] 

                
}
```

# k-NN リクエストとレスポンスの形式
<a name="kNN-inference-formats"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。このトピックでは、SageMaker AI K 最近傍アルゴリズムで利用可能な出力形式をリストします。

## 入力: CSV リクエスト形式
<a name="kNN-input-csv"></a>

content-type: text/csv

```
1.2,1.3,9.6,20.3
```

これは `label_size` またはエンコーディングパラメータを受け入れます。`label_size` は 0 であり、UTF-8 エンコーディングであることが想定されます。

## 入力: JSON リクエスト形式
<a name="kNN-input-json"></a>

content-type: application/json

```
{
  "instances": [
    {"data": {"features": {"values": [-3, -1, -4, 2]}}},
    {"features": [3.0, 0.1, 0.04, 0.002]}]
}
```

## 入力: JSON Lines リクエスト形式
<a name="kNN-input-jsonlines"></a>

content-type: application/jsonlines

```
{"features": [1.5, 16.0, 14.0, 23.0]}
{"data": {"features": {"values": [1.5, 16.0, 14.0, 23.0]}}
```

## 入力: recordIO リクエスト形式
<a name="kNN-input-recordio"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {
            'values': {
                values: [-3, -1, -4, 2]  # float32
            }
        },
        label = {}
    },
    Record = {
        features = {
            'values': {
                values: [3.0, 0.1, 0.04, 0.002]  # float32
            }
        },
        label = {}
    },
]
```

## 出力: JSON レスポンス形式
<a name="kNN-output-json"></a>

accept: application/json

```
{
  "predictions": [
    {"predicted_label": 0.0},
    {"predicted_label": 2.0}
  ]
}
```

## 出力: JSON Lines レスポンス形式
<a name="kNN-output-jsonlines"></a>

accept: application/jsonlines

```
{"predicted_label": 0.0}
{"predicted_label": 2.0}
```

## 出力: Verbose JSON レスポンス形式
<a name="KNN-output-verbose-json"></a>

冗長モードでは API は、最小から最大までソートされた距離ベクトルと、ラベルベクトル内の対応する要素を使用して、検索結果を提供します。この例では、k が 3 に設定されます。

accept: application/json; verbose=true

```
{
  "predictions": [
    {
        "predicted_label": 0.0,
        "distances": [3.11792408, 3.89746071, 6.32548437],
        "labels": [0.0, 1.0, 0.0]
    },
    {
        "predicted_label": 2.0,
        "distances": [1.08470316, 3.04917915, 5.25393973],
        "labels": [2.0, 2.0, 0.0]
    }
  ]
}
```

## 出力: recordIO-protobuf レスポンスの形式
<a name="kNN-output-recordio-protobuf"></a>

content-type: application/x-recordio-protobuf

```
[
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [2.0]  # float32
            }
        }
    }
]
```

## 出力: Verbose recordIO-protobuf レスポンスの形式
<a name="kNN-output-verbose-recordio"></a>

冗長モードでは API は、最小から最大までソートされた距離ベクトルと、ラベルベクトル内の対応する要素を使用して、検索結果を提供します。この例では、k が 3 に設定されます。

accept: application/x-recordio-protobuf; verbose=true

```
[
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            },
            'distances': {
                values: [3.11792408, 3.89746071, 6.32548437]  # float32
            },
            'labels': {
                values: [0.0, 1.0, 0.0]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'predicted_label': {
                values: [0.0]  # float32
            },
            'distances': {
                values: [1.08470316, 3.04917915, 5.25393973]  # float32
            },
            'labels': {
                values: [2.0, 2.0, 0.0]  # float32
            }
        }
    }
]
```

## k-NN アルゴリズムのサンプル出力
<a name="kNN-sample-output"></a>

regressor タスクの場合:

```
[06/08/2018 20:15:33 INFO 140026520049408] #test_score (algo-1) : ('mse', 0.013333333333333334)
```

classifier タスクの場合:

```
[06/08/2018 20:15:46 INFO 140285487171328] #test_score (algo-1) : ('accuracy', 0.98666666666666669)
```

# LightGBM
<a name="lightgbm"></a>

[LightGBM](https://lightgbm.readthedocs.io/en/latest/) は、よく知られた効率的な勾配ブースト決定木アルゴリズムのオープンソースを実装したものです。GBDT は、一連のより単純でより弱いモデルから得られた推定のアンサンブルを組み合わせることで、ターゲット変数の正確な予測を試みる、教師あり学習アルゴリズムです。LightGBM は、追加の手法を使用し、従来の GBDT の効率とスケーラビリティを大幅に向上させています。このページには、LightGBM の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI LightGBM の使用方法
<a name="lightgbm-modes"></a>

LightGBM は Amazon SageMaker AI の組み込みアルゴリズムとして使用できます。次のセクションでは、SageMaker Python SDK で LightGBM を使用する方法について説明します。Amazon SageMaker Studio Classic UI から LightGBM を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **LightGBM を組み込みアルゴリズムとして使用する**

  次のコード例に示すように、LightGBM 組み込みアルゴリズムを使用して、LightGBM トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、LightGBM 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  LightGBM イメージ URI を指定した後、LightGBM コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。LightGBM 組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトは提供されているので、置き換える必要はありません。スクリプトモードを使用した SageMaker トレーニングジョブの作成に豊富な経験を持っている場合、独自の LightGBM トレーニングスクリプトを追加できます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "lightgbm-classification-model", "*", "training"
  training_instance_type = "ml.m5.xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_multiclass/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train" 
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation" 
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "num_boost_round"
  ] = "500"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1, # for distributed training, specify an instance_count greater than 1
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "train": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  LightGBM を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
  + [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.ipynb)
  + [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.ipynb)

# LightGBM アルゴリズムの入出力インターフェイス
<a name="InputOutput-LightGBM"></a>

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

SageMaker AI の LightGBM の実装では、トレーニングと推論に CSV 形式が対応しています:
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

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

**トレーニングデータ、検証データ、およびカテゴリ別特徴量の入力形式**

LightGBM モデルに入力するトレーニングデータをフォーマットする方法に注意してください。トレーニングおよび検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`train` と `validation` チャネルの両方を使用して入力データを提供します。または、`train` チャネルだけを使用することもできます。

**注記**  
`train` と `training` のどちらも、LightGBM トレーニングに有効なチャネル名です。

**`train` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `train` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、1 つ以上の CSV ファイルを指す S3 プレフィックスか、1 つの特定の CSV ファイルを指すフル S3 パスのいずれかです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列に存在する必要があります。`train` または `validation` チャネルに複数の CSV ファイルが提供されている場合、LightGBM アルゴリズムはファイルを連結します。検証データは、各ブースティング反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルまたはファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`train` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`train` チャネルのみを使用する**。

別の方法として、`train` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスは、1 つ以上の CSV ファイルを含む `train/` という名前のサブディレクトリを持つディレクトリを指す必要があります。オプションで、同じ場所に 1 つ以上の CSV ファイルを含む `validation/` という別のサブディレクトリを含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

SageMaker AI LightGBM は Python の Joblib モジュールを使用してモデルをシリアル化または逆シリアル化し、それをモデルの保存またはロードに使用します。

**SageMaker AI LightGBM でトレーニングしたモデルを JobLib モジュールで使用するには**
+ 次の Python コードを使用します。

  ```
  import joblib 
  import tarfile
  
  t = tarfile.open('model.tar.gz', 'r:gz')
  t.extractall()
  
  model = joblib.load(model_file_path)
  
  # prediction with test data
  # dtest should be a pandas DataFrame with column names feature_0, feature_1, ..., feature_d
  pred = model.predict(dtest)
  ```

## LightGBM アルゴリズムの Amazon EC2 インスタンスに関する推奨事項
<a name="Instance-LightGBM"></a>

現在、SageMaker AI LightGBM は、単一インスタンスとマルチインスタンスの CPU トレーニングをサポートしています。マルチインスタンスの CPU トレーニング (分散トレーニング) の場合、推定器を定義するときに 1 より大きい `instance_count` を指定します。LightGBM を使用した分散トレーニングの詳細については、「[Amazon SageMaker AI LightGBM Distributed training using Dask](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/sagemaker_lightgbm_distributed_training_dask/sagemaker-lightgbm-distributed-training-dask.html)」を参照してください。

LightGBM は (CPU バウンドではなく) メモリバウンドアルゴリズムです。そのため、コンピューティング最適化インスタンス (C5 など) よりも汎用コンピューティングインスタンス (M5 など) を選択することをお勧めします。さらに、トレーニングデータを保持するために、選択したインスタンスに十分なメモリを用意することを推奨します。

## LightGBM サンプルノートブック
<a name="lightgbm-sample-notebooks"></a>

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


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Classification_LightGBM_CatBoost.html)  |  このノートブックでは、Amazon SageMaker AI LightGBM アルゴリズムを使用して表形式の分類モデルをトレーニングおよびホストする方法について説明しています。  | 
|  [Tabular regression with Amazon SageMaker AI LightGBM and CatBoost algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/lightgbm_catboost_tabular/Amazon_Tabular_Regression_LightGBM_CatBoost.html)  |  このノートブックでは、Amazon SageMaker AI LightGBM アルゴリズムを使用して表形式のリグレッションモデルをトレーニングおよびホストする方法について説明しています。  | 
|  [Amazon SageMaker AI LightGBM Distributed training using Dask](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/sagemaker_lightgbm_distributed_training_dask/sagemaker-lightgbm-distributed-training-dask.html)  |  このノートブックは、Dask フレームワークを使用した Amazon SageMaker AI LightGBM アルゴリズムによる分散トレーニングについて説明しています。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# LightGBM の仕組み
<a name="lightgbm-HowItWorks"></a>

LightGBM は、従来の勾配ブースティング決定木 (GBDT) アルゴリズムに、勾配ベースの片側サンプリング (GOSS) および排他的特徴量バンドル (EFB) という 2 つの新しい手法を追加して実装しています。これらの手法は GBDT の効率とスケーラビリティが大幅に向上するように設計されています。

LightGBM アルゴリズムは、微調整可能なさまざまなデータ型、関係、分布、および多様性のあるハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。LightGBM は、リグレッション、分類 (バイナリとマルチクラス)、およびランキングの問題に使用できます。

勾配ブースティングの詳細については、「[SageMaker AI XGBoost アルゴリズムの仕組み](xgboost-HowItWorks.md)」を参照してください。LightGBM メソッドで使用されるその他の GOSS および EFB 手法の詳細については、「*[LightGBM: A Highly Efficient Gradient Boosting Decision Tree](https://proceedings.neurips.cc/paper/2017/file/6449f44a102fde848669bdd9eb6b76fa-Paper.pdf)*」を参照してください。

# LightGBM ハイパーパラメータ
<a name="lightgbm-hyperparameters"></a>

次の表には、Amazon SageMaker AI LightGBM アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI LightGBM アルゴリズムは、オープンソースの [LightGBM](https://github.com/microsoft/LightGBM) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[LightGBM サンプルノートブック](lightgbm.md#lightgbm-sample-notebooks) のサンプルデータセットに基づいています。

デフォルトでは、SageMaker AI LightGBM アルゴリズムは分類問題のタイプに基づいて自動的に評価指標と目的関数を選択します。LightGBM アルゴリズムは、データ内のラベルの数に基づいて分類問題のタイプを検出します。リグレッションの問題の場合、評価指標は二乗平均平方根誤差で、目的関数は L2 損失です。二項分類の問題の場合は、評価指標と目的関数はどちらも二項交差エントロピーです。多クラス分類の問題の場合、評価指標は多クラス交差エントロピーで、目的関数はソフトマックスです。`metric` ハイパーパラメータを使用して、デフォルトの評価メトリクスを変更できます。説明、有効値、およびデフォルト値など、LightGBM ハイパーパラメータの詳細については、次の表を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1boost\$1round |  ブースティングの反復の最大数。**注意:** LightGBM は複数クラス分類問題に対して内部的に `num_class * num_boost_round` ツリーを構築します。 有効な値: 整数、範囲:正の整数。 デフォルト値: `100`。  | 
| early\$1stopping\$1rounds |  ある検証データポイントの 1 つのメトリクスが最後の `early_stopping_rounds` ラウンドで改善されない場合、トレーニングは停止します。`early_stopping_rounds` が 0 以下の場合、このハイパーパラメータは無視されます。 有効な値: 整数。 デフォルト値: `10`。  | 
| metric |  検証データの評価メトリクス。`metric` がデフォルトの `"auto"` 値に設定されている場合、アルゴリズムは分類問題のタイプに基づいて自動的に評価メトリクスを選択します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/lightgbm-hyperparameters.html) 有効な値: 文字列、次のいずれか: (`"auto"`、`"rmse"`、`"l1"`、`"l2"`、`"huber"`、`"fair"`、`"binary_logloss"`、`"binary_error"`、`"auc"`、`"average_precision"`、`"multi_logloss"`、`"multi_error"`、`"auc_mu"`、または `"cross_entropy"`)。 デフォルト値: `"auto"`。  | 
| learning\$1rate |  トレーニング例の各バッチを完了した後に、モデルの重みが更新されるレート。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.1`。  | 
| num\$1leaves |  あるツリーの葉の最大数。 有効な値: 整数、範囲: (`1`, `131072`)。 デフォルト値: `64`。  | 
| feature\$1fraction |  各反復 (ツリー) で選択される特徴量のサブセット。1.0 未満にする必要があります。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.9`。  | 
| bagging\$1fraction |  `feature_fraction` に類似した特徴量のサブセットですが、`bagging_fraction` はリサンプリングなしでランダムにデータの一部を選択します。 有効な値: 浮動小数点、範囲: (`0.0`, `1.0`)。 デフォルト値: `0.9`。  | 
| bagging\$1freq |  バギングを実行する頻度。LightGBM は `bagging_freq` 反復のたびに、次の `bagging_freq` 反復に使用するデータのパーセンテージをランダムに選択します。このパーセンテージは `bagging_fraction` ハイパーパラメータによって決定されます。`bagging_freq` が 0 の場合、バギングは無効になります。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `1`。  | 
| max\$1depth |  ツリーモデルの最大深度。これはデータの量が少ない場合のオーバーフィットを処理するのに使われます。`max_depth` が 0 以下の場合は、最大深度に制限がないことを意味します。 有効な値: 整数。 デフォルト値: `6`。  | 
| min\$1data\$1in\$1leaf |  1 つの葉に含まれるデータの最小量。オーバーフィットの処理にも使われます。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `3`。  | 
| max\$1delta\$1step |  ツリーの葉の最大出力を制限するのに使用されます。`max_delta_step` が 0 以下の場合、制約はありません。葉の最終的な最大出力は `learning_rate * max_delta_step` です。 有効な値: 浮動小数点数。 デフォルト値: `0.0`。  | 
| lambda\$1l1 |  L1 正規化。 有効な値: 浮動小数点数、範囲: 負以外の浮動小数点数。 デフォルト値: `0.0`。  | 
| lambda\$1l2 |  L2 正規化。 有効な値: 浮動小数点数、範囲: 負以外の浮動小数点数。 デフォルト値: `0.0`。  | 
| boosting |  ブースティングの種類 有効な値: 文字列、次のいずれか: (`"gbdt"`、`"rf"`、`"dart"`、または `"goss"`) デフォルト値: `"gbdt"`。  | 
| min\$1gain\$1to\$1split |  分割を実行するための最小ゲイン。トレーニングの高速化に使われます。 有効な値: 整数、浮動小数点数: 負以外の浮動小数点数。 デフォルト値: `0.0`。  | 
| scale\$1pos\$1weight |  正のクラスを持つラベルの重み。二項分類タスクにのみ使用されます。`is_unbalance` が `"True"` に設定されている場合、`scale_pos_weight` は使用できません。 有効な値: 浮動小数点数、範囲: 正の浮動小数点数 デフォルト値: `1.0`。  | 
| tree\$1learner |  ツリーの線形の種類。 有効な値: 文字列、次のいずれか: (`"serial"`、`"feature"`、`"data"`、または `"voting"`)。 デフォルト値: `"serial"`。  | 
| feature\$1fraction\$1bynode |  各ツリーノードのランダムな特徴量のサブセットを選択します。例えば、`feature_fraction_bynode` が `0.8` の場合、特徴量の 80% が選択されます。オーバーフィットの処理にも使われます。 有効な値: 整数、範囲: (`0.0`,`1.0`]。 デフォルト値: `1.0`。  | 
| is\$1unbalance |  トレーニングデータが不均衡な場合は、`"True"` に設定します。二項分類タスクにのみ使用されます。`is_unbalance` は `scale_pos_weight` では使用できません。 有効な値: 文字列、次のいずれか: (`"True"` または `"False"`) デフォルト値: `"False"`。  | 
| max\$1bin |  特徴量の値をバケット化するために使用するビンの最大数。ビンの数が少ないとトレーニングの精度は低下することがありますが、一般的なパフォーマンスは向上する可能性があります。オーバーフィットの処理にも使われます。 有効な値: 整数、範囲: (1, ∞)。 デフォルト値: `255`。  | 
| tweedie\$1variance\$1power |  Tweedie 分布の分散を制御します。これを `2.0` に近づけると、ガンマ分布にシフトします。これを `1.0` に近づけると、ポアソン分布にシフトします。リグレッションタスクにのみ使用されます。 有効な値: 浮動小数点数、範囲: [`1.0`, `2.0`)。 デフォルト値: `1.5`。  | 
| num\$1threads |  LightGBM の実行に使用される並列スレッドの数。値 0 は、OpenMP のデフォルトスレッド数を意味します。 有効な値: 整数、範囲: 負以外の整数。 デフォルト値: `0`。  | 
| verbosity |  出力メッセージの詳細。`verbosity` が `0` よりも小さい場合、出力メッセージには致命的なエラーのみ表示されます。`verbosity` が `0` に設定されている場合、出力メッセージにはエラーと警告が含まれます。`verbosity` が `1` の場合、出力メッセージには詳細情報が表示されます。`verbosity` が `1` より大きい場合、出力メッセージには詳細情報が表示され、デバッグに使用できます。 有効な値: 整数。 デフォルト値: `1`。  | 

# LightGBM モデルを調整する
<a name="lightgbm-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**モデル調整は、次のハイパーパラメータに重点を置いています。

**注記**  
学習目的関数は、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。詳細については、「[LightGBM ハイパーパラメータ](lightgbm-hyperparameters.md)」を参照してください。
+ モデルトレーニング中に最適化する学習の目標関数
+ 検証中にモデルのパフォーマンスを評価するための評価指標
+ モデルの自動調整時に使用する一連のハイパーパラメータと各値の範囲

自動モデル調整は、指定されたハイパーパラメータを検索して、選択された評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
LightGBM の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## LightGBM アルゴリズムで計算される評価メトリクス
<a name="lightgbm-metrics"></a>

SageMaker AI LightGBM アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。評価メトリクスは、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| rmse | 二乗平均平方根誤差 | 最小化 | "rmse: ([0-9\$1\$1.]\$1)" | 
| l1 | 平均絶対誤差 | 最小化 | "l1: ([0-9\$1\$1.]\$1)" | 
| l2 | 平均二乗誤差 | 最小化 | "l2: ([0-9\$1\$1.]\$1)" | 
| huber | Huber 損失 | 最小化 | "huber: ([0-9\$1\$1.]\$1)" | 
| fair | 公平性損失 | 最小化 | "fair: ([0-9\$1\$1.]\$1)" | 
| binary\$1logloss | 二項交差エントロピー | 最大化 | "binary\$1logloss: ([0-9\$1\$1.]\$1)" | 
| binary\$1error | バイナリエラー | 最小化 | "binary\$1error: ([0-9\$1\$1.]\$1)" | 
| auc | AUC | 最大化 | "auc: ([0-9\$1\$1.]\$1)" | 
| average\$1precision | 平均適合率スコア | 最大化 | "average\$1precision: ([0-9\$1\$1.]\$1)" | 
| multi\$1logloss | マルチクラス交差エントロピー | 最大化 | "multi\$1logloss: ([0-9\$1\$1.]\$1)" | 
| multi\$1error | 多クラスエラースコア | 最小化 | "multi\$1error: ([0-9\$1\$1.]\$1)" | 
| auc\$1mu | AUC-mu | 最大化 | "auc\$1mu: ([0-9\$1\$1.]\$1)" | 
| cross\$1entropy | 交差エントロピー | 最小化 | "cross\$1entropy: ([0-9\$1\$1.]\$1)" | 

## 調整可能な LightGBM ハイパーパラメータ
<a name="lightgbm-tunable-hyperparameters"></a>

次のハイパーパラメータを使用して LightGBM モデルを調整します。LightGBM 検証メトリクスの最適化に最も影響を与えるハイパーパラメータは、`learning_rate`、`num_leaves`、`feature_fraction`、`bagging_fraction`、`bagging_freq`、`max_depth`、および `min_data_in_leaf` です。すべての LightGBM ハイパーパラメータのリストについては、「[LightGBM ハイパーパラメータ](lightgbm-hyperparameters.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001、MaxValue: 0.01 | 
| num\$1leaves | IntegerParameterRanges | MinValue: 10、MaxValue: 100 | 
| feature\$1fraction | ContinuousParameterRanges | MinValue: 0.1、MaxValue: 1.0 | 
| bagging\$1fraction | ContinuousParameterRanges | MinValue: 0.1、MaxValue: 1.0 | 
| bagging\$1freq | IntegerParameterRanges | MinValue: 0、MaxValue: 10 | 
| max\$1depth | IntegerParameterRanges | MinValue: 15、MaxValue: 100 | 
| min\$1data\$1in\$1leaf | IntegerParameterRanges | MinValue: 10、MaxValue: 200 | 

# 線形学習アルゴリズム
<a name="linear-learner"></a>

*線形モデル*は、分類や回帰の問題を解決するために使用される、教師あり学習アルゴリズムです。入力として、examples (*x*、*y*) というラベルのモデルを提供します。*x* は高次元ベクトル、*y* は数値ラベルです。二項分類の問題の場合、ラベルは 0 または 1 である必要があります。複数クラス分類の問題の場合、ラベルは 0 ～ `num_classes` - 1 である必要があります。回帰の問題の場合、*y* は実数です。アルゴリズムは線形関数、または分類問題の場合は線形しきい値関数を学習し、ベクトル *x* をラベル *y* の近似値にマッピングします。

Amazon SageMaker AI の線形学習アルゴリズムは、分類と回帰の両方の問題についてソリューションを提供します。SageMaker AI アルゴリズムを使用すると、さまざまなトレーニング目標を同時に探索し、検証セットから最適なソリューションを選択できます。また、多数のモデルを探索して最適なものを選択することもできます。最善のモデルは、以下を最適化します。
+ 平均二乗誤差、交差エントロピー損失、絶対誤差などの連続的な目標
+ F1 尺度、適合率と再現率、または精度など、分類に適した個別の目標。

連続的な目標のみのソリューションを提供する方法と比較して、SageMaker AI 線形学習アルゴリズムは、単純なハイパーパラメータ最適化手法より大幅に高速化します。また、より便利でもあります。

線形学習者アルゴリズムは、観測値を表す行と特徴の次元を表す列を持つデータ行列を必要とします。また、データポイントと一致するラベルが含まれる追加の列を要求します。少なくとも、Amazon SageMaker AI の線形学習者では、データを入出力する場所と目標タイプ (分類または回帰) を引数として指定する必要があります。特徴の次元も指定する必要があります。詳細については、「[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)」を参照してください。リクエストボディの `HyperParameters` 文字列マップに追加のパラメータを指定できます。これらのパラメータは最適化の手順、またはトレーニングを行う目標関数の詳細を制御します。たとえば、エポックの数、正規化、損失タイプなどです。

[マネージドスポットトレーニング](https://docs.aws.amazon.com/sagemaker/latest/dg/model-managed-spot-training.html)を使用している場合、線形学習アルゴリズムは[モデルの状態のスナップショットを撮影するチェックポイント](https://docs.aws.amazon.com/sagemaker/latest/dg/model-checkpoints.html)の使用をサポートしています。

**Topics**
+ [線形学習アルゴリズムの入出力インターフェイス](#ll-input_output)
+ [線形学習アルゴリズムの EC2 インスタンスに関する推奨事項](#ll-instances)
+ [線形学習サンプルノートブック](#ll-sample-notebooks)
+ [線形学習の仕組み](ll_how-it-works.md)
+ [線形学習のハイパーパラメータ](ll_hyperparameters.md)
+ [線形学習モデルを調整する](linear-learner-tuning.md)
+ [線形学習のレスポンス形式](LL-in-formats.md)

## 線形学習アルゴリズムの入出力インターフェイス
<a name="ll-input_output"></a>

Amazon SageMaker AI 線形学習アルゴリズムは、トレーニング、検証 (オプション)、テスト (オプション) の 3 つのデータチャネルに対応しています。検証データを指定する場合、`S3DataDistributionType` を `FullyReplicated` にする必要があります。アルゴリズムは、エポックごとに検証損失を記録し、検証データのサンプルを使用して最適なモデルを調整および選択します。検証データを指定しないと、アルゴリズムはトレーニングデータのサンプルを使用してモデルを調整および選択します。テストデータを指定すると、アルゴリズムログに最終モデルのテストスコアが含まれます。

**トレーニング**については、線形学習者アルゴリズムは、`recordIO-wrapped protobuf` と `CSV` の両方の形式をサポートします。`application/x-recordio-protobuf` 入力タイプの場合は、Float32 テンソルのみがサポートされます。`text/csv` 入力タイプの場合、最初の列はラベルと見なされ、これが予測のターゲット変数です。ファイルモードまたはパイプモードを使用すると、`recordIO-wrapped-protobuf` または `CSV` の形式のデータについて線形学習者モデルをトレーニングできます。

**推論**については、線形学習者アルゴリズムは、`application/json`、`application/x-recordio-protobuf`、および `text/csv` の各形式をサポートします。新しいデータを予測する場合、レスポンスの形式はモデルの種類によって異なります。**回帰** (`predictor_type='regressor'`) の場合、`score` はモデルによって生成される予測です。**分類** (`predictor_type='binary_classifier'` または `predictor_type='multiclass_classifier'`) の場合、モデルは `score` に加えて `predicted_label` も返します。`predicted_label` はモデルによって予測されるクラスで、`score` はその予測の強度を測定します。
+ **バイナリ分類の場合**、`predicted_label` は `0` または `1` であり、`score` は、アルゴリズムがラベルを 1 にする必要があると確信している程度を示す単一の浮動小数点数です。
+ **複数クラスの分類の場合**、`predicted_class` は `0` から `num_classes-1` の整数になり、`score` はクラスごとに 1 つの浮動小数点数のリストになります。

分類問題の `score` を解釈するには、使用する損失関数を考慮する必要があります。`loss` ハイパーパラメータ値が `logistic` (バイナリ分類用) または `softmax_loss` (マルチクラス分類用) の場合、`score` は対応するクラスの確率として解釈することができます。これらは、`loss` の値がデフォルト値 `auto` の場合に線形学習者によって使用される損失値です。ただし、損失が `hinge_loss` に設定されている場合は、スコアを確率として解釈することはできません。これは、ヒンジ損失で Support Vector Classifier に対応するためです。この場合、確率の推定値は生成されません。

入出力ファイル形式の詳細については、[線形学習のレスポンス形式](LL-in-formats.md) を参照してください。推論形式の詳細については、[線形学習サンプルノートブック](#ll-sample-notebooks) を参照してください。

## 線形学習アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="ll-instances"></a>

線形学習アルゴリズムは、トレーニングと推論の CPU インスタンスと GPU インスタンスの両方をサポートしてを行います。GPU の場合、線形学習アルゴリズムは P2、P3、G4dn、G5 GPU ファミリーをサポートします。

テスト中に、マルチ GPU インスタンスがシングル GPU インスタンスより高速である実質的な証拠は見つかりませんでした。結果はユースケースに応じて異なります。

## 線形学習サンプルノートブック
<a name="ll-sample-notebooks"></a>

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


| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [MNIST データセットの概要](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/linear_learner_mnist/linear_learner_mnist.html)  |   MNIST データセットを使用して 1 桁の数字を予測するように二項分類子をトレーニングします。  | 
|  [複数クラス分類子を構築する方法](https://sagemaker-examples.readthedocs.io/en/latest/scientific_details_of_algorithms/linear_learner_multiclass_classification/linear_learner_multiclass_classification.html)  |   UCI の Covertype データセットを使用して、複数クラス分類子をトレーニングする方法を説明します。  | 
|  [推論向け機械学習 (ML) パイプラインを構築する方法](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-python-sdk/scikit_learn_inference_pipeline/Inference%20Pipeline%20with%20Scikit-learn%20and%20Linear%20Learner.html)  |   Scikit-Learn コンテナを使用して、エンドツーエンドの ML パイプラインを構築する方法を説明します。  | 

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

# 線形学習の仕組み
<a name="ll_how-it-works"></a>

線形学習者アルゴリズムの実装には、事前処理、学習、検証という 3 つのステップがあります。

## ステップ 1: 事前処理する
<a name="step1-preprocessing"></a>

正規化 (特徴スケーリング) は、特定の損失関数の重要な前処理ステップであり、データセットでトレーニングされるモデルが単一特徴のウェイトで占有されないようにします。Amazon SageMaker AI 線形学習アルゴリズムには、この前処理ステップを支援する正規化オプションがあります。正規化がオンになっている場合、アルゴリズムはまず小さなサンプルデータを調べて、各特徴および各ラベルの平均値と標準偏差を学習します。次に、完全なデータセット内の各特徴は、平均が 0 になるようにシフトされ、単位標準偏差を持つようにスケーリングされます。

**注記**  
最良の結果を得るには、トレーニングの前にデータをシャッフルします。シャッフルされていないデータを使用したトレーニングでは、トレーニングが失敗する場合があります。

線形学習者アルゴリズムで、 `normalize_data` および `normalize_label` ハイパーパラメータをそれぞれ使用して、特徴データとラベルを正規化するかどうかを設定できます。正規化は、回帰の特徴とラベルの両方でデフォルトで有効になっています。バイナリ分類では正規化できるのは特徴のみであり、これがデフォルトの動作です。

## ステップ 2: トレーニングする
<a name="step2-training"></a>

線形学習者アルゴリズムでは、確率的勾配降下法 (SGD) の分散実装を使用してトレーニングを行います。最適化プロセスを制御するには、最適化アルゴリズムを選択します。たとえば、Adam、AdaGrad、確率的勾配降下法、またはその他の最適化アルゴリズムを使用するように選択できます。また、モーメンタム、学習レート、学習レートスケジュールなどのハイパーパラメータも指定します。どのアルゴリズムまたはハイパーパラメータの値を使用すればよいかわからない場合は、大部分のデータセットで機能するデフォルトを選択してください。

トレーニング中は、目標がそれぞれ異なる複数のモデルを同時に最適化します。たとえば、L1 または L2 の正規化を変化させて、さまざまなオプティマイザ設定を試します。

## ステップ 3: しきい値を検証および設定する
<a name="step3-validation"></a>

複数のモデルを並行してトレーニングする場合、モデルは検証セットに対して評価され、トレーニングが完了すると最適なモデルが選択されます。回帰では、検証セットで最善の損失を達成するモデルが最適なモデルです。分類では、検証セットのサンプルを使用して分類しきい値を調整します。選択されている最適なモデルは、検証セットで最良のバイナリ分類選択基準を達成するモデルです。そのような基準には、F1 の測定、精度、クロスエントロピー損失などがあります。

**注記**  
アルゴリズムで検証セットが指定されていない場合は、最適なモデルを評価して選択することはできません。並列トレーニングとモデル選択を利用するには、アルゴリズムに検証セットを指定する必要があります。

# 線形学習のハイパーパラメータ
<a name="ll_hyperparameters"></a>

線形学習者アルゴリズムのハイパーパラメータを以下の表に示します。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。ハイパーパラメータが `auto` に設定されている場合、Amazon SageMaker AI はそのハイパーパラメータの値を自動的に計算して設定します。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1classes |  レスポンス変数のクラス数。このアルゴリズムでは、クラスに `0`, ..., `num_classes - 1` のラベルが付けられていると想定します。 `predictor_type` が `multiclass_classifier` の場合、**必須**です。それ以外の場合、アルゴリズムはこれを無視します。 有効な値: 3 ～ 1,000,000 の整数  | 
| predictor\$1type |  ターゲット変数のタイプを、二項分類、複数クラス分類、または回帰として指定します。 **必須** 有効な値: `binary_classifier`、`multiclass_classifier`、または `regressor`  | 
| accuracy\$1top\$1k |  複数クラス分類のトップ k 精度メトリクスを計算するときには、*k* の値。モデルがトップ k のスコアの 1 つを実際のラベルに割り当てる場合、サンプルは正しいものとしてスコア付けされます。 **オプション** 有効な値: 正の整数 デフォルト値： 3   | 
| balance\$1multiclass\$1weights |  クラスの重みを使用するかどうかを指定します。これにより、損失関数で各クラスの重要度が等しくなります。`predictor_type` が `multiclass_classifier` である場合にのみ使用されます。 **オプション** 有効な値: `true`、`false` デフォルト値: `false`  | 
| beta\$11 |  最初のモーメントの見積もりの指数関数的減衰率。`optimizer` の値が `adam` のである場合にのみ適用されます。 **オプション** 有効な値 : `auto` または 0 ～ 1.0 の浮動小数点値 デフォルト値: `auto`  | 
| beta\$12 |  2 番目のモーメントの見積もりの指数関数的減衰率。`optimizer` の値が `adam` のである場合にのみ適用されます。 **オプション** 有効な値 : `auto` または 0 ～ 1.0 の浮動小数点整数  デフォルト値: `auto`  | 
| bias\$1lr\$1mult |  バイアス項に別の学習レートを許可します。バイアスの実際の学習レートは `learning_rate` \$1 `bias_lr_mult` です。 **オプション** 有効な値: `auto` または正の浮動小数点整数 デフォルト値: `auto`  | 
| bias\$1wd\$1mult |  バイアス項に別の正規化を許可します。バイアスの L2 正規化の実際の重みは、`wd` \$1 `bias_wd_mult` です。デフォルトでは、バイアス項に正規化はありません。 **オプション** 有効な値: `auto` または負でない浮動小数点整数 デフォルト値: `auto`  | 
| binary\$1classifier\$1model\$1selection\$1criteria |  `predictor_type` が `binary_classifier` に設定されている場合は、検証データセット (または検証データセットを指定していない場合はトレーニングデータセット) のモデル評価基準。基準は次のとおりです。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) **オプション** 有効な値: `accuracy`、`f_beta`、`precision_at_target_recall`、`recall_at_target_precision`、または `loss_function` デフォルト値: `accuracy`  | 
| early\$1stopping\$1patience | 関連するメトリクスが改善されない場合にトレーニングを終了するまでに待機するエポックの数。binary\$1classifier\$1model\$1selection\$1criteria に値を指定した場合、メトリクスはその値になります。それ以外の場合、メトリクスは loss ハイパーパラメータに指定された値と同じになります。メトリクスは検証データ上で評価されます。検証データを提供していない場合、メトリクスは常に `loss` ハイパーパラメータに指定された値と同じになり、トレーニングデータで評価されます。早期停止を無効にするには、`early_stopping_patience` を `epochs` に指定された値より大きい値に設定します。**オプション**有効な値: 正の整数デフォルト値： 3 | 
| early\$1stopping\$1tolerance |  損失の改善を計測する相対的な許容値。損失改善率から前の最善の損失を除算した値がこの値よりも小さい場合、早期停止は改善がゼロであると見なします。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.001  | 
| epochs |  トレーニングデータへのパスの最大数。 **オプション** 有効な値: 正の整数 デフォルト値: 15  | 
| f\$1beta |  二項分類または複数クラス分類の F スコアメトリクスを計算するときに使用するベータの値。`binary_classifier_model_selection_criteria` に指定された値が `f_beta` である場合にも使用されます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 1.0   | 
| feature\$1dim |  入力データ内の特徴の数。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| huber\$1delta |  Huber 損失のパラメータ。トレーニングとメトリクスの評価中、デルタより小さいエラーについては L2 損失、デルタより大きいエラーについては L1 損失を計算します。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 1.0   | 
| init\$1bias |  バイアス項の初期重み。 **オプション** 有効な値: 浮動小数点整数 デフォルト値: 0  | 
| init\$1method |  モデルの重み付けに使用される初期分布関数を設定します。関数は以下のとおりです。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) **オプション** 有効な値: `uniform` または `normal` デフォルト値: `uniform`  | 
| init\$1scale |  モデルの重みに対して初期の uniform 分布をスケーリングします。`init_method` ハイパーパラメータが `uniform` に設定されている場合にのみ適用されます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.07  | 
| init\$1sigma |  正規分布の初期標準偏差。`init_method` ハイパーパラメータが `normal` に設定されている場合にのみ適用されます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.01  | 
| l1 |  L1 正則化パラメータ。L1 正則化を使用しないようにするには、値を 0 に設定します。 **オプション** 有効な値: `auto` または負以外の浮動小数点数 デフォルト値: `auto`  | 
| learning\$1rate |  パラメータ更新のためにオプティマイザによって使用されるステップサイズ。 **オプション** 有効な値: `auto` または正の浮動小数点整数 デフォルト値: `auto` (選択されているオプティマイザによって値が異なる)。  | 
| loss |  損失関数を指定します。 使用可能な損失関数とそのデフォルト値は、`predictor_type` の値によって異なります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) 有効な値: `auto`、`logistic`、`squared_loss`、`absolute_loss`、`hinge_loss`、`eps_insensitive_squared_loss`、`eps_insensitive_absolute_loss`、`quantile_loss`、または `huber_loss`  **オプション** デフォルト値: `auto`  | 
| loss\$1insensitivity |  イプシロンを区別しない損失タイプのパラメータ。トレーニングとメトリクスの評価中、この値より小さいエラーはゼロであると見なされます。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 0.01   | 
| lr\$1scheduler\$1factor |  `lr_scheduler_step` ハイパーパラメータごとに、学習レートはこの数量減少します。`use_lr_scheduler` ハイパーパラメータが `true` に設定されている場合にのみ適用されます。 **オプション** 有効な値 : `auto` または 0 ～ 1 の正の浮動小数点整数 デフォルト値: `auto`  | 
| lr\$1scheduler\$1minimum\$1lr |  学習レートは `lr_scheduler_minimum_lr` に設定された値より低い値まで減少することはありません。`use_lr_scheduler` ハイパーパラメータが `true` に設定されている場合にのみ適用されます。 **オプション** 有効な値: `auto` または正の浮動小数点整数 デフォルト値: `auto`  | 
| lr\$1scheduler\$1step |  学習レートの減少の間のステップの数。`use_lr_scheduler` ハイパーパラメータが `true` に設定されている場合にのみ適用されます。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| margin |  `hinge_loss` 関数のマージン。 **オプション** 有効な値: 正の浮動小数点整数 デフォルト値: 1.0  | 
| mini\$1batch\$1size |  データイテレーターのミニバッチごとの観測数。 **オプション** 有効な値: 正の整数 デフォルト値: 1000  | 
| momentum |  `sgd` オプティマイザのモーメンタム。 **オプション** 有効な値 : `auto` または 0 ～ 1.0 の浮動小数点整数 デフォルト値: `auto`  | 
| normalize\$1data |  トレーニング前に特徴を正規化します。データ正規化では、0 の平均を持つように各特徴のデータをシフトし、単位標準偏差を持つようにスケーリングします。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `true`  | 
| normalize\$1label |  ラベルを正規化します。ラベル正規化はゼロの平均を持つようにラベルをシフトし、単位標準偏差を持つようにスケーリングします。 デフォルト値 `auto` では、ラベルは回帰問題に対して正規化されますが、分類問題に対しては正規化されません。分類問題において `normalize_label` ハイパーパラメータを `true` に設定した場合、アルゴリズムはそれを無視します。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `auto`  | 
| num\$1calibration\$1samples |  モデルのキャリブレーション (最適なしきい値を見つけるとき) のために使用する、検証データセットから取得した観測値の数。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| num\$1models |  並列でトレーニングするモデルの数。デフォルトの `auto` では、アルゴリズムが並列でトレーニングするモデルの数を決定します。1 つのモデルのトレーニングは指定されたトレーニングパラメータ (regularization、optimizer、loss) に従って行われ、その他はクローズパラメータによって行われます。 **オプション** 有効な値: `auto` または正の整数 デフォルト値: `auto`  | 
| num\$1point\$1for\$1scaler |  正規化の計算または項のバイアス解除に使用するデータポイントの数。 **オプション** 有効な値: 正の整数 デフォルト値: 10,000  | 
| optimizer |  使用する最適化アルゴリズム。 **オプション** 有効な値: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/ll_hyperparameters.html) デフォルト値: `auto`。`auto` のデフォルトの設定は `adam` です。  | 
| positive\$1example\$1weight\$1mult |  二項分類子をトレーニングするときに正のサンプルに割り当てられる重み。負の例の重みは 1 で固定されます。負の例*と*正の例を分類する際のエラーがトレーニング損失に等しい影響を与えるようにアルゴリズムに重みを選択させるには、`balanced` を指定します。アルゴリズムにパフォーマンスを最適化する重みを選択させるには、`auto` を指定します。 **オプション** 有効な値:`balanced`、`auto`、または正の浮動小数点整数 デフォルト値: 1.0  | 
| quantile |  分位損失の分位数。分位数 q については、モデルは `true_label` の値が確率 q の予測より大きくなるように予測を作成しようとします。 **オプション** 有効な値 : 0 ～ 1 の浮動小数点整数 デフォルト値: 0.5  | 
| target\$1precision |  目標適合率。`binary_classifier_model_selection_criteria` が `recall_at_target_precision` である場合、再現率は最大化される一方で、適合率はこの値で保持されます。 **オプション** 有効な値 : 0 ～ 1.0 の浮動小数点整数 デフォルト値: 0.8  | 
| target\$1recall |  目標再現率。`binary_classifier_model_selection_criteria` が `precision_at_target_recall` である場合、適合率は最大化される一方で、再現率はこの値で保持されます。 **オプション** 有効な値 : 0 ～ 1.0 の浮動小数点整数 デフォルト値: 0.8  | 
| unbias\$1data |  平均が 0 になるように、トレーニング前に特徴のバイアスを解除します。デフォルトでは、`use_bias` ハイパーパラメータが `true` に設定されると、データのバイアスは解除されます。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `auto`  | 
| unbias\$1label |  平均が 0 になるように、トレーニング前にラベルのバイアスを解除します。`use_bias` ハイパーパラメータが `true` に設定されている場合にのみ、回帰に適用されます。 **オプション** 有効な値: `auto`、`true`、または `false` デフォルト値: `auto`  | 
| use\$1bias |  モデルにバイアス項 (線形方程式の切片項) を含めるかどうかを指定します。 **オプション** 有効な値: `true` または `false` デフォルト値: `true`  | 
| use\$1lr\$1scheduler |  学習レートにスケジューラを使用するかどうか。スケジューラを使用するには、`true` を指定します。 **オプション** 有効な値: `true` または `false` デフォルト値: `true`  | 
| wd |  重み付け減衰パラメータ。L2 正則化パラメータとも呼ばれます。L2 正則化を使用しないようにするには、値を 0 に設定します。 **オプション** 有効な値: `auto` または負でない浮動小数点整数 デフォルト値: `auto`  | 

# 線形学習モデルを調整する
<a name="linear-learner-tuning"></a>

*自動モデル調整*は、ハイパーパラメータ調整とも呼ばれ、データセットのさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。調整可能なハイパーパラメータ、それぞれの値の範囲、および目標メトリクスを選択します。アルゴリズムが計算するメトリクスから目標メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、目標メトリクスを最適化するモデルになる値の組み合わせを見つけます。

線形学習者アルゴリズムには、ここで説明する自動モデル調整機能とは別に、ハイパーパラメータを調整するための内部メカニズムもあります。デフォルトでは、線形学習者アルゴリズムは複数のモデルを並行してトレーニングすることによってハイパーパラメータを調整します。自動モデル調整を使用すると、線形学習者の内部調整メカニズムは自動的にオフになります。これにより、並列モデルの数 `num_models` が 1 に設定されます。`num_models` に設定した値は、アルゴリズムによって無視されます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## 線形学習アルゴリズムによって計算されたメトリクス
<a name="linear-learner-metrics"></a>

線形学習者アルゴリズムは、次のテーブルのメトリクスをレポートします。このメトリクスは、トレーニング中に計算されます。それらの 1 つを目標メトリクスとして選択してください。過剰適合を回避するために、トレーニングメトリクスではなく検証メトリクスに対してモデルを調整することをお勧めします。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| test:absolute\$1loss |  テストデータセットの最終モデルの絶対損失。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| test:binary\$1classification\$1accuracy |  テストデータセットの最終モデルの精度。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:binary\$1f\$1beta |  テストデータセットの最終モデルの F-ベータスコア。デフォルトでは、これは F1 スコアであり、適合率と再現率の調和平均です。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:dcg |  テストデータセットの最終モデルの減損累積利得。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:macro\$1f\$1beta |  テストデータセットの最終モデルの F-ベータスコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:macro\$1precision |  テストデータセットの最終モデルの適合スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:macro\$1recall |  テストデータセットの最終モデルの再現率スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:mse |  テストデータセットの最終モデルの平均二乗誤差。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| test:multiclass\$1accuracy |  テストデータセットの最終モデルの精度。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:multiclass\$1top\$1k\$1accuracy |  テストデータセットで予測された上位 k のラベルの精度。このメトリクスを目標として選択する場合は、`accuracy_top_k` ハイパーパラメータを使用して k の値を設定することをおすすめします。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| test:objective\$1loss |  モデルがトレーニングされた後のテストデータセットの目標損失関数の平均値。既定の設定では、損失は、二項分類ではロジスティック損失、回帰では二乗損失です。他のタイプの損失を設定するには、 `loss` ハイパーパラメータを使用します。  |  最小化  | 
| test:precision |  テストデータセットの最終モデルの適合率。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `precision_at_target_recall` に設定し、`target_recall` ハイパーパラメータの値を設定して、目標再現率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:recall |  テストデータセットの最終モデルの再現率。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `recall_at_target_precision` に設定し、`target_precision` ハイパーパラメータの値を設定して、目標適合率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| test:roc\$1auc\$1score |  テストデータセットにおける最終モデルの受信操作特性曲線 (ROC 曲線) の下面積。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:absolute\$1loss |  検証データセットの最終モデルの絶対損失。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| validation:binary\$1classification\$1accuracy |  検証データセットの最終モデルの精度。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:binary\$1f\$1beta |  検証データセットの最終モデルの F-ベータスコア。デフォルトでは、F-ベータスコアは F1 スコアであり、`validation:precision` および `validation:recall` メトリクスの調和平均です。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:dcg |  検証データセットにおける最終モデルの減損累積利得。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:macro\$1f\$1beta |  検証データセットの最終モデルの F-ベータスコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:macro\$1precision |  検証データセットの最終モデルの適合スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:macro\$1recall |  検証データセットの最終モデルの再現率スコア。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:mse |  検証データセットの最終モデルの平均二乗誤差。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| validation:multiclass\$1accuracy |  検証データセットの最終モデルの精度。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:multiclass\$1top\$1k\$1accuracy |  検証データセットで予測された上位 k 個のラベルの精度。このメトリクスを目的として選択する場合は、`accuracy_top_k` ハイパーパラメータを使用して k の値を設定することをおすすめします。この目標メトリクスは、複数クラス分類にのみ有効です。  |  最大化  | 
| validation:objective\$1loss |  各エポックにおける検証データセットに対する目標損失関数の平均値。既定の設定では、損失は、二項分類ではロジスティック損失、回帰では二乗損失です。他のタイプの損失を設定するには、`loss` ハイパーパラメータを使用します。  |  最小化  | 
| validation:precision |  検証データセットの最終モデルの精度。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `precision_at_target_recall` に設定し、`target_recall` ハイパーパラメータの値を設定して、目標再現率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:recall |  検証データセットの最終モデルのリコール。このメトリクスを目標として選択した場合は、`binary_classifier_model_selection` ハイパーパラメータを `recall_at_target_precision` に設定し、`target_precision` ハイパーパラメータの値を設定して、目標適合率を設定することをお勧めします。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 
| validation:rmse |  検証データセットの最終モデルの二乗平均平方根誤差。この目標メトリクスは、回帰にのみ有効です。  |  最小化  | 
| validation:roc\$1auc\$1score |  検証データセットにおける最終モデルの受信操作特性曲線 (ROC 曲線) の下面積。この目標メトリクスは、二項分類にのみ有効です。  |  最大化  | 

## 線形学習ハイパーパラメータの調整
<a name="linear-learner-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して線形学習者モデルを調整できます。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| wd |  `ContinuousParameterRanges`  |  `MinValue: ``1e-7`, `MaxValue`: `1`  | 
| l1 |  `ContinuousParameterRanges`  |  `MinValue`: `1e-7`, `MaxValue`: `1`  | 
| learning\$1rate |  `ContinuousParameterRanges`  |  `MinValue`: `1e-5`, `MaxValue`: `1`  | 
| mini\$1batch\$1size |  `IntegerParameterRanges`  |  `MinValue`: `100`, `MaxValue`: `5000`  | 
| use\$1bias |  `CategoricalParameterRanges`  |  `[True, False]`  | 
| positive\$1example\$1weight\$1mult |  `ContinuousParameterRanges`  |  `MinValue`: 1e-5、`MaxValue`: `1e5`  | 

# 線形学習のレスポンス形式
<a name="LL-in-formats"></a>

## JSON レスポンス形式
<a name="LL-json"></a>

Amazon SageMaker AI の組み込みアルゴリズムはすべて、「[Common Data Formats - Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html)」で説明されている一般的な入力推論形式に従います。以下は、SageMaker AI 線形学習アルゴリズムで使用可能な出力形式です。

**バイナリの分類**

```
let response =   {
    "predictions":    [
        {
            "score": 0.4,
            "predicted_label": 0
        } 
    ]
}
```

**複数クラスの分類**

```
let response =   {
    "predictions":    [
        {
            "score": [0.1, 0.2, 0.4, 0.3],
            "predicted_label": 2
        } 
    ]
}
```

**回帰**

```
let response =   {
    "predictions":    [
        {
            "score": 0.4
        } 
    ]
}
```

## JSONLINES レスポンス形式
<a name="LL-jsonlines"></a>

**バイナリの分類**

```
{"score": 0.4, "predicted_label": 0}
```

**複数クラスの分類**

```
{"score": [0.1, 0.2, 0.4, 0.3], "predicted_label": 2}
```

**回帰**

```
{"score": 0.4}
```

## RECORDIO レスポンス形式
<a name="LL-recordio"></a>

**バイナリの分類**

```
[
    Record = {
        features = {},
        label = {
            'score': {
                keys: [],
                values: [0.4]  # float32
            },
            'predicted_label': {
                keys: [],
                values: [0.0]  # float32
            }
        }
    }
]
```

**複数クラスの分類**

```
[
    Record = {
    "features": [],
    "label":    {
            "score":  {
                    "values":   [0.1, 0.2, 0.3, 0.4]   
            },
            "predicted_label":  {
                    "values":   [3]
            }
       },
    "uid":  "abc123",
    "metadata": "{created_at: '2017-06-03'}"
   }
]
```

**回帰**

```
[
    Record = {
        features = {},
        label = {
            'score': {
                keys: [],
                values: [0.4]  # float32
            }   
        }
    }
]
```

# TabTransformer
<a name="tabtransformer"></a>

[TabTransformer](https://arxiv.org/abs/2012.06678) は、教師あり学習の新しいディープな表形式データモデリングアーキテクチャです。TabTransformer アーキテクチャは、自己アテンションベースの Transformers で構築されています。トランスフォーマーレイヤーは、カテゴリ別特徴の埋め込みを堅牢なコンテキスト埋め込みに変換して、予測精度を高めます。さらに、TabTransformer から学習したコンテキスト埋め込みは、欠落しているデータ特徴とノイズの多いデータ特徴の両方に対して非常に堅牢で、解釈可能性もより優れています。このページには、TabTransformer の Amazon EC2 インスタンスに関する推奨事項とサンプルノートブックについての情報が含まれています。

# SageMaker AI TabTransformer の使用方法
<a name="tabtransformer-modes"></a>

TabTransformer は Amazon SageMaker AI に組み込まれているアルゴリズムとして使用できます。次のセクションでは、SageMaker Python st SDK で TabTransformer を使用する方法について説明します。Amazon SageMaker Studio Classic UI から TabTransformer を使用する方法の詳細については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。
+ **TabTransformer を、組み込みアルゴリズムとして使用する**

  次のコード例に示すように、TabTransformer 組み込みアルゴリズムを使用して、TabTransformer トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API (または [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 2 を使用する場合は `get_image_uri` API) を使用して、TabTransformer 組み込みアルゴリズムイメージ URI を自動的に検出できます。

  TabTransformer イメージ URI を指定した後、TabTransformer コンテナを使用することで、SageMaker AI Estimator API を使用して推定器を作成し、トレーニングジョブを開始できます。TabTransformer の組み込みアルゴリズムはスクリプトモードで実行されますが、トレーニングスクリプトが提供されているので、置き換える必要はありません。スクリプトモードを使用して SageMaker トレーニングジョブを作成した経験が豊富な場合は、独自の TabTransformer トレーニングスクリプトを組み込むことができます。

  ```
  from sagemaker import image_uris, model_uris, script_uris
  
  train_model_id, train_model_version, train_scope = "pytorch-tabtransformerclassification-model", "*", "training"
  training_instance_type = "ml.p3.2xlarge"
  
  # Retrieve the docker image
  train_image_uri = image_uris.retrieve(
      region=None,
      framework=None,
      model_id=train_model_id,
      model_version=train_model_version,
      image_scope=train_scope,
      instance_type=training_instance_type
  )
  
  # Retrieve the training script
  train_source_uri = script_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, script_scope=train_scope
  )
  
  train_model_uri = model_uris.retrieve(
      model_id=train_model_id, model_version=train_model_version, model_scope=train_scope
  )
  
  # Sample training data is available in this bucket
  training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
  training_data_prefix = "training-datasets/tabular_binary/"
  
  training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/train"
  validation_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}/validation"
  
  output_bucket = sess.default_bucket()
  output_prefix = "jumpstart-example-tabular-training"
  
  s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"
  
  from sagemaker import hyperparameters
  
  # Retrieve the default hyperparameters for training the model
  hyperparameters = hyperparameters.retrieve_default(
      model_id=train_model_id, model_version=train_model_version
  )
  
  # [Optional] Override default hyperparameters with custom values
  hyperparameters[
      "n_epochs"
  ] = "50"
  print(hyperparameters)
  
  from sagemaker.estimator import Estimator
  from sagemaker.utils import name_from_base
  
  training_job_name = name_from_base(f"built-in-algo-{train_model_id}-training")
  
  # Create SageMaker Estimator instance
  tabular_estimator = Estimator(
      role=aws_role,
      image_uri=train_image_uri,
      source_dir=train_source_uri,
      model_uri=train_model_uri,
      entry_point="transfer_learning.py",
      instance_count=1,
      instance_type=training_instance_type,
      max_run=360000,
      hyperparameters=hyperparameters,
      output_path=s3_output_location
  )
  
  # Launch a SageMaker Training job by passing the S3 path of the training data
  tabular_estimator.fit(
      {
          "training": training_dataset_s3_path,
          "validation": validation_dataset_s3_path,
      }, logs=True, job_name=training_job_name
  )
  ```

  TabTransformer を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
  + [Tabular classification with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Classification_TabTransformer.ipynb)
  + [Tabular regression with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Regression_TabTransformer.ipynb)

# TabTransformer アルゴリズムの入出力インターフェイス
<a name="InputOutput-TabTransformer"></a>

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

SageMaker AI の TabTransformer の実装では、トレーニングと推論に CSV 形式が対応しています。
+ **トレーニング ContentType** の場合、有効な入力は *text/csv* である必要があります。
+ **推論 ContentType** の場合、有効な入力は *text/csv* です。

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

**トレーニングデータ、検証データ、カテゴリ別特徴の入力形式**

TabTransformer モデルに入力するトレーニングデータをフォーマットする方法にご注意ください。トレーニングデータと検証データを含む Amazon S3 バケットへのパスを指定する必要があります。カテゴリ別特徴のリストを含めることもできます。`training` と `validation` チャネルの両方を使用して入力データを提供します。`training` チャネルだけを使用することもできます。

**`training` と `validation` チャネルの両方を使用する**

入力データは、2 つの S3 パス (1 つは `training` チャネル用、もう 1 つは `validation` チャネル用) によって指定できます。各 S3 パスは、1 つ以上の CSV ファイルを指す S3 プレフィックスか、1 つの特定の CSV ファイルを指すフル S3 パスのいずれかです。ターゲット変数は CSV ファイルの最初の列にある必要があります。予測変数 (特徴量) は残りの列にある必要があります。`training` または `validation` チャネルに複数の CSV ファイルが提供された場合、TabTransformer アルゴリズムはファイルを連結します。検証データは、各ブースティングの反復の最後に検証スコアを計算するために使用されます。検証スコアが改善しなくなると、早期停止が適用されます。

予測子にカテゴリ別特徴が含まれている場合は、トレーニングデータファイルまたはファイルと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。カテゴリ別特徴の JSON ファイルを提供する場合、`training` チャネルは特定の CSV ファイルではなく S3 プレフィックスを指している必要があります。このファイルには Python ディクショナリが含まれている必要があり、キーは `"cat_index_list"` という文字列で、値が一意の整数のリストです。値リストの各整数は、トレーニングデータの CSV ファイル内の対応するカテゴリ別特徴の列インデックスを示す必要があります。各値は、正の整数 (0 は目標値を表すため 0 より大きい) で、`Int32.MaxValue` (2147483647) より小さく、列の総数よりも小さい必要があります。カテゴリ別インデックス JSON ファイルは 1 つだけである必要があります。

**`training` チャネルのみを使用する**。

別の方法として、`training` チャネル用の単一の S3 パスを介して入力データを指定することもできます。この S3 パスは、1 つ以上の CSV ファイルを含む `training/` という名前のサブディレクトリを持つディレクトリを指す必要があります。オプションで、同じ場所に 1 つ以上の CSV ファイルを含む `validation/` という別のサブディレクトリを含めることができます。検証データが提供されない場合は、トレーニングデータの 20% がランダムにサンプリングされ、検証データとして使用されます。予測変数にカテゴリ別特徴が含まれている場合は、データサブディレクトリと同じ場所に `categorical_index.json` という名前の JSON ファイルを提供できます。

**注記**  
CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計 (インスタントカウント \$1 `InstanceType` で使用できるメモリ) でトレーニングデータセットを保持できる必要があります。

## TabTransformer アルゴリズムの Amazon EC2 インスタンス推奨
<a name="Instance-TabTransformer"></a>

SageMaker AI TabTransformer は、単一インスタンスの CPU と単一インスタンスの GPU トレーニングをサポートしています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。GPU トレーニングを利用するには、インスタンスタイプを GPU インスタンスの 1 つ (P3 など) として指定します。現在、SageMaker AI TabTransformer ではマルチ GPU トレーニングはサポートされていません。

## TabTransformer サンプルノートブック
<a name="tabtransformer-sample-notebooks"></a>

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


****  

| **ノートブックのタイトル** | **説明** | 
| --- | --- | 
|  [Tabular classification with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Classification_TabTransformer.ipynb)  |  このノートブックでは、Amazon SageMaker AI TabTransformer アルゴリズムを使用して表形式の分類モデルをトレーニングしホストする方法について説明します。  | 
|  [Tabular regression with Amazon SageMaker AI TabTransformer algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/introduction_to_amazon_algorithms/tabtransformer_tabular/Amazon_Tabular_Regression_TabTransformer.ipynb)  |  このノートブックでは、Amazon SageMaker AI TabTransformer アルゴリズムを使用して表形式の回帰モデルをトレーニングしホストする方法について説明します。  | 

SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いた後、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。ノートブックを開くには、その [**Use (使用)**] タブを選択し、[**Create copy (コピーを作成)**] を選択します。

# TabTransformer の仕組み
<a name="tabtransformer-HowItWorks"></a>

TabTransformer は、教師あり学習の新しいディープな表形式データモデリングアーキテクチャです。TabTransformer は、自己アテンションベースの Transformers で構築されています。トランスフォーマーレイヤーは、カテゴリ別特徴の埋め込みを堅牢なコンテキスト埋め込みに変換して、予測精度を高めます。さらに、TabTransformer から学習したコンテキスト埋め込みは、欠落しているデータ特徴とノイズの多いデータ特徴の両方に対して非常に堅牢で、解釈可能性もより優れています。

TabTransformer アルゴリズムは、さまざまなデータ型、関係、分布、および微調整できるさまざまなハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて優れた結果を出しています。TabTransformer は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

TabTransformer アーキテクチャを以下に図で示します。

![\[TabTransformer のアーキテクチャ。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/tabtransformer_illustration.png)


詳細については、「*[TabTransformer: Tabular Data Modeling Using Contextual Embeddings](https://arxiv.org/abs/2012.06678)*」を参照してください。

# TabTransformer のハイパーパラメータ
<a name="tabtransformer-hyperparameters"></a>

次の表には、Amazon SageMaker AI TabTransformer アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。ユーザーは、データからモデルパラメータを推定しやすくするために、これらのパラメータを設定します。SageMaker AI TabTransformer アルゴリズムは、オープンソースの [TabTransformer](https://github.com/jrzaurin/pytorch-widedeep) パッケージの実装です。

**注記**  
デフォルトのハイパーパラメータは、[TabTransformer サンプルノートブック](tabtransformer.md#tabtransformer-sample-notebooks) のサンプルデータセットに基づいています。

SageMaker AI TabTransformer アルゴリズムは分類問題のタイプに基づいて評価指標と目標関数を自動的に選択します。TabTransformer アルゴリズムは、データ内のラベル数に基づいて分類問題のタイプを検出します。回帰問題の場合、評価指標は R の二乗、目標関数は平均二乗誤差です。二項分類問題の場合、評価指標と目標関数はどちらも二項交差エントロピーです。多クラス分類問題の場合、評価指標と目標関数はどちらもマルチクラスの交差エントロピーになります。

**注記**  
TabTransformer の評価指標と目標関数は、現在ハイパーパラメータとして使用できません。代わりに、SageMaker AI TabTransformer の組み込みアルゴリズムは、ラベル列の一意の整数の数に基づいて分類タスクのタイプ (回帰、バイナリ、またはマルチクラス) を自動的に検出し、評価指標と目標関数を割り当てます。


| Parameter Name | 説明 | 
| --- | --- | 
| n\$1epochs |  深層ニューラルネットワークをトレーニングするエポック数。 有効な値: 整数、範囲: 正の整数。 デフォルト値: `5`。  | 
| patience |  最後の `patience` ラウンドで 1 つの検証データポイントの 1 つのメトリックが改善されない場合、トレーニングは停止します。 有効な値: 整数、範囲: (`2`, `60`)。 デフォルト値: `10`。  | 
| learning\$1rate |  トレーニング例をバッチごとに処理した後に、モデルのウェイトを更新する頻度。 有効な値: 浮動小数点、範囲: 正の浮動小数点数。 デフォルト値: `0.001`。  | 
| batch\$1size |  ネットワークを通して伝播されたサンプルの数。 有効な値: 整数、範囲: (`1`, `2048`)。 デフォルト値: `256`。  | 
| input\$1dim |  カテゴリ列や連続列をエンコードする埋め込みのディメンション。 有効な値: 文字列、`"16"`、`"32"`、`"64"`、`"128"`、`"256"`、または `"512"` のいずれか。 デフォルト値: `"32"`。  | 
| n\$1blocks |  Transformer エンコーダーのブロック数。 有効な値: 整数、範囲: (`1`, `12`)。 デフォルト値: `4`。  | 
| attn\$1dropout |  マルチヘッドアテンションレイヤーに適用されるドロップアウト率。 有効な値: 浮動小数点、範囲: (`0`, `1`)。 デフォルト値: `0.2`。  | 
| mlp\$1dropout |  エンコーダーレイヤーと Transformer エンコーダー上部の最終 MLP レイヤー内の FeedForward ネットワークに適用されるドロップアウト率。 有効な値: 浮動小数点、範囲: (`0`, `1`)。 デフォルト値: `0.1`。  | 
| frac\$1shared\$1embed |  特定の列について、異なるカテゴリすべてで共有される埋め込みの割合。 有効な値: 浮動小数点、範囲: (`0`, `1`)。 デフォルト値: `0.25`。  | 

# TabTransformer モデルを調整する
<a name="tabtransformer-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**モデル調整は、次のハイパーパラメータに重点を置いています。

**注記**  
学習の目標関数と評価指標は、ラベル列の一意の整数の数によって決まる分類タスクの種類に基づいて自動的に割り当てられます。詳細については、「[TabTransformer のハイパーパラメータ](tabtransformer-hyperparameters.md)」を参照してください。
+ モデルトレーニング中に最適化する学習の目標関数
+ 検証中にモデルのパフォーマンスを評価するための評価指標
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
TabTransformer の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## TabTransformer アルゴリズムで計算される評価メトリクス
<a name="tabtransformer-metrics"></a>

SageMaker AI TabTransformer アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。評価メトリクスは、ラベル列の一意の整数の数によって決定される分類タスクの種類に基づいて自動的に割り当てられます。


| メトリクス名 | 説明 | 最適化の方向 | 正規表現パターン | 
| --- | --- | --- | --- | 
| r2 | R の二乗 | 最大化 | "metrics=\$1'r2': (\$1\$1S\$1)\$1" | 
| f1\$1score | 二項交差エントロピー | 最大化 | "metrics=\$1'f1': (\$1\$1S\$1)\$1" | 
| accuracy\$1score | マルチクラス交差エントロピー | 最大化 | "metrics=\$1'accuracy': (\$1\$1S\$1)\$1" | 

## 調整可能な TabTransformer のハイパーパラメータ
<a name="tabtransformer-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して TabTransformer モデルを調整します。TabTransformer の評価指標の最適化に最も影響を与えるハイパーパラメータは、`learning_rate`、`input_dim`、`n_blocks`、`attn_dropout`、`mlp_dropout`、および `frac_shared_embed` です。すべての TabTransformer ハイパーパラメータのリストについては、「[TabTransformer のハイパーパラメータ](tabtransformer-hyperparameters.md)」を参照してください。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| learning\$1rate | ContinuousParameterRanges | MinValue: 0.001、MaxValue: 0.01 | 
| input\$1dim | CategoricalParameterRanges | [16, 32, 64, 128, 256, 512] | 
| n\$1blocks | IntegerParameterRanges | MinValue: 1、MaxValue: 12 | 
| attn\$1dropout | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.8 | 
| mlp\$1dropout | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.8 | 
| frac\$1shared\$1embed | ContinuousParameterRanges | MinValue: 0.0、MaxValue: 0.5 | 

# Amazon SageMaker AI の XGBoost アルゴリズム
<a name="xgboost"></a>

[XGBoost](https://github.com/dmlc/xgboost) (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムの 1 つで、より単純なモデルのセットからの推定を複数組み合わせることで、ターゲット変数の正確な予測を試みます。XGBoost アルゴリズムは、次の理由で機械学習のコンペティションにおいて優れたパフォーマンスを発揮しています。
+ さまざまなデータ型、関係、分布の堅牢な処理。
+ ファインチューニングできるさまざまなハイパーパラメータ。

XGBoost は、回帰、分類 (バイナリとマルチクラス)、ランキングの問題に使用できます。

XGBoost アルゴリズムの新しいリリースは、次のいずれかの方法で使用できます。
+ Amazon SageMaker AI 組み込みアルゴリズムとして使用する。
+ ローカル環境でトレーニングスクリプトを実行するフレームワークとして使用する。

この実装では、元のバージョンよりも、メモリのフットプリントが縮小し、ログ記録が強化され、ハイパーパラメータ検証が向上し、メトリクスセットが拡大しています。マネージド型の XGBoost 環境でトレーニングスクリプトを実行する XGBoost `estimator` も提供されています。SageMaker AI XGBoost の現在のリリースは、元の XGBoost バージョン 1.0、1.2、1.3、1.5、1.7、3.0 に基づいています。

Amazon SageMaker AI XGBoost アルゴリズムの詳細については、次のブログ記事を参照してください。
+ [Introducing the open-source Amazon SageMaker AI XGBoost algorithm container](https://aws.amazon.com/blogs/machine-learning/introducing-the-open-source-amazon-sagemaker-xgboost-algorithm-container/)
+ [Amazon SageMaker AI XGBoost now offers fully distributed GPU training](https://aws.amazon.com/blogs/machine-learning/amazon-sagemaker-xgboost-now-offers-fully-distributed-gpu-training/)

## サポートバージョン
<a name="xgboost-supported-versions"></a>

詳細については、[「 サポートポリシー](https://docs.aws.amazon.com/sagemaker/latest/dg/pre-built-containers-support-policy.html#pre-built-containers-support-policy-ml-framework)」を参照してください。
+ フレームワーク (オープンソース) モード: 1.2-1、1.2-2、1.3-1、1.5-1、1.7-1、3.0-5
+ アルゴリズムモード: 1.2-1、1.2-2、1.3-1、1.5-1、1.7-1、3.0-5

**警告**  
必要なコンピューティング容量のため、SageMaker AI XGBoost のバージョン 3.0-5 は、トレーニングまたは推論のために P3 インスタンスファミリーの GPU インスタンスと互換性がありません。

**警告**  
パッケージ互換のため、SageMaker AI XGBoost のバージョン 3.0-5 は SageMaker デバッガーをサポートしていません。

**警告**  
必要なコンピューティングキャパシティのため、SageMaker AI XGBoost のバージョン 1.7-1 は、トレーニングまたは推論用の P2 インスタンスファミリーの GPU インスタンスと互換性がありません。

**警告**  
ネットワーク分離モード: pip をバージョン 25.2 以降にアップグレードしないでください。新しいバージョンでは、モジュールのインストール中に PyPI から setuptools を取得しようとする場合があります。

**重要**  
SageMaker AI XGBoost イメージ URI を取得する場合は、イメージ URI タグに `:latest` または `:1` を使用しないでください。使用するネイティブ XGBoost パッケージバージョンの SageMaker AI が管理する XGBoost コンテナを選択するには、[サポートバージョン](#xgboost-supported-versions) のいずれかを指定する必要があります。SageMaker AI XGBoost コンテナに移行されたパッケージバージョンを確認するには、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html)」を参照してください。次に、 を選択し AWS リージョン、**XGBoost (アルゴリズム) **セクションに移動します。

**警告**  
XGBoost 0.90 バージョンは廃止されました。XGBoost 0.90 のセキュリティアップデートまたはバグ修正のサポートは終了しました。XGBoost のバージョンを新しいバージョンにアップグレードすることを強くお勧めします。

**注記**  
XGBoost v1.1 は SageMaker AI ではサポートされていません。XGBoost 1.1 では、テスト入力の特徴量が LIBSVM 入力のトレーニングデータよりも少ないと、予測の実行が機能しません。この機能は XGBoost v1.2 で復元されています。SageMaker AI XGBoost 1.2-2 以降の使用を検討してください。

**注記**  
XGBoost v1.0-1 は使用できますが、正式にはサポートされていません。

## XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項
<a name="Instance-XGBoost"></a>

SageMaker AI XGBoost は CPU と GPU のトレーニングと推論をサポートしています。インスタンスの推奨事項は、XGBoost アルゴリズムのバージョンだけでなく、トレーニングや推論のニーズによっても異なります。詳細については、次のいずれかのタブを選択してください。
+ [CPU トレーニング](#Instance-XGBoost-training-cpu)
+ [GPU トレーニング](#Instance-XGBoost-training-gpu)
+ [分散 CPU トレーニング](#Instance-XGBoost-distributed-training-cpu)
+ [分散 GPU トレーニング](#Instance-XGBoost-distributed-training-gpu)
+ [推論](#Instance-XGBoost-inference)

### トレーニング
<a name="Instance-XGBoost-training"></a>

SageMaker AI XGBoost アルゴリズムは CPU と GPU のトレーニングをサポートします。

#### CPU トレーニング
<a name="Instance-XGBoost-training-cpu"></a>

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

#### GPU トレーニング
<a name="Instance-XGBoost-training-gpu"></a>

SageMaker AI XGBoost バージョン 1.2-2 以降では、GPU トレーニングがサポートされています。インスタンスごとのコストは高いものの、GPU はトレーニングをより迅速に行うため、費用対効果が高くなります。

SageMaker AI XGBoost バージョン 1.2-2 以降は、P2、P3、G4dn、および G5 GPU インスタンスファミリーをサポートしています。

SageMaker AI XGBoost バージョン 1.7-1 以降は、P3、G4dn、および G5 GPU インスタンスファミリーをサポートしています。コンピューティングキャパシティの要件により、バージョン 1.7-1 以降は P2 インスタンスファミリーをサポートしていないことに注意してください。

SageMaker AI XGBoost バージョン 3.0-5 以降では、G4dn および G5 GPU インスタンスファミリーがサポートされています。コンピューティング容量の要件により、バージョン 3.0-5 以降は P3 インスタンスファミリーをサポートしていないことに注意してください。

GPU トレーニングを活用するには、以下を実行します。
+ インスタンスタイプを GPU インスタンスの 1 つとして指定する (G4dn など) 
+ 既存の XGBoost スクリプトで `tree_method` ハイパーパラメータを `gpu_hist` に設定します。

### 分散トレーニング
<a name="Instance-XGBoost-distributed-training"></a>

SageMaker AI XGBoost は、分散トレーニング用の CPU インスタンスと GPU インスタンスをサポートしています。

#### 分散 CPU トレーニング
<a name="Instance-XGBoost-distributed-training-cpu"></a>

CPU トレーニングを複数のインスタンスで実行するには、推定器の `instance_count` パラメータを 1 より大きい値に設定します。入力データをインスタンスの総数で割る必要があります。

##### 入力データを複数のインスタンスに分割
<a name="Instance-XGBoost-distributed-training-divide-data"></a>

次の手順を使用して入力データを分割します。

1. 入力データを小さなファイルに分割します。ファイルの数は分散トレーニングに使用されるインスタンスの数と等しいか、それ以上である必要があります。1 つの大きなファイルではなく、小さいファイルを複数使用すると、トレーニングジョブのデータダウンロード時間も短縮されます。

1. [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html) を作成するときは、分散パラメータを `ShardedByS3Key` に設定します。これにより、トレーニングジョブで *n* 個のインスタンスが指定されている場合、各インスタンスが取得するのは S3 のファイル数の約 *1/n* になります。

#### 分散 GPU トレーニング
<a name="Instance-XGBoost-distributed-training-gpu"></a>

分散トレーニングは、単一の GPU インスタンスでもマルチ GPU インスタンスでも使用できます。

**単一 GPU インスタンスによる分散トレーニング**

SageMaker AI XGBoost バージョン 1.2-2 から 1.3-1 では、単一 GPU インスタンスのトレーニングのみがサポートされています。つまり、マルチ GPU インスタンスを選択しても、インスタンスごとに 1 つの GPU しか使用されません。

次の場合は、入力データをインスタンスの総数で割る必要があります。
+ XGBoost バージョン 1.2-2 ～ 1.3-1 を使用している場合。
+ マルチ GPU インスタンスを使用する必要がない場合。

 詳細については、「[入力データを複数のインスタンスに分割](#Instance-XGBoost-distributed-training-divide-data)」を参照してください。

**注記**  
SageMaker AI XGBoost のバージョン 1.2-2 から 1.3-1 までは、マルチ GPU インスタンスを選択しても、インスタンスごとに 1 つの GPU しか使用しません。

**マルチ GPU インスタンスによる分散トレーニング**

[バージョン 1.5-1 以降、SageMaker AI XGBoost は Dask による分散 GPU トレーニングを提供します。](https://www.dask.org/)Dask では、1 つ以上のマルチ GPU インスタンスを使用するときに、すべての GPU を利用できます。Dask は単一 GPU インスタンスを使用する場合にも機能します。

Dask でトレーニングを行うには、次の手順を使用します。

1. [TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html) の `distribution` パラメータを省略するか、`FullyReplicated` に設定します。

1. ハイパーパラメータを定義するときは、`use_dask_gpu_training` を `"true"`に設定します。

**重要**  
Dask による分散トレーニングは CSV と Parquet の入力形式のみをサポートします。LIBSVM や PROTOBUF などの他のデータ形式を使用すると、トレーニングジョブは失敗します。  
Parquet データの場合は、列名が文字列として保存されていることを確認してください。他のデータ型の名前を持つ列は読み込めません。

**重要**  
Dask による分散トレーニングではパイプモードはサポートされません。パイプモードが指定されている場合、トレーニングジョブは失敗します。

SageMaker AI XGBoost を Dask でトレーニングする際に注意すべき点がいくつかあります。データは必ず小さいファイルに分割してください。Dask は各 Parquet ファイルをパーティションとして読み取ります。Dask ワーカーは GPU ごとに存在します。そのため、ファイル数は GPU の総数 (インスタンス数 x インスタンスあたりの GPU 数) よりも大きい数である必要があります。ファイル数が非常に多いと、パフォーマンスが低下する可能性もあります。詳細については、「[Dask Best Practices](https://docs.dask.org/en/stable/best-practices.html)」を参照してください。

#### 出力のバリエーション
<a name="Instance-XGBoost-distributed-training-output"></a>

指定された `tree_method` ハイパーパラメータによって、XGBoost トレーニングに使用されるアルゴリズムが決まります。`approx`、`hist`、および `gpu_hist` の 3 つの方法はすべて近似法であり、分位数の計算にはスケッチを使用します。詳細については、XGBoost ドキュメントの「[Tree Methods](https://xgboost.readthedocs.io/en/stable/treemethod.html)」を参照してください。スケッチは近似アルゴリズムです。そのため、分散トレーニングの対象となるワーカーの数などの要因によって、モデルにばらつきが生じることが予想されます。変動の有意性はデータによって異なります。

### 推論
<a name="Instance-XGBoost-inference"></a>

SageMaker AI XGBoost は推論用に CPU インスタンスと GPU インスタンスをサポートしています。推論用のインスタンスタイプについては、「[Amazon SageMaker AI ML Instance Types](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

# SageMaker AI XGBoost の使用方法
<a name="xgboost-how-to-use"></a>

SageMaker AI では、組み込みのアルゴリズムまたはフレームワークとして XGBoost を使用できます。XGBoost をフレームワークとして使用すると、独自のトレーニングスクリプトをカスタマイズできるため、柔軟性が高まり、より高度なシナリオを利用できるようになります。以下のセクションでは、SageMaker Python SDK で XGBoost を使用する方法と、XGBoost アルゴリズムの入出力インターフェイスについて説明します。Amazon SageMaker Studio Classic UI から XGBoost を使用する方法については、「[SageMaker JumpStart の事前トレーニング済みモデル](studio-jumpstart.md)」を参照してください。

**Topics**
+ [XGBoost をフレームワークとして使用する](#xgboost-how-to-framework)
+ [XGBoost を組み込みアルゴリズムとして使用する](#xgboost-how-to-built-in)
+ [XGBoost アルゴリズムの入出力インターフェイス](#InputOutput-XGBoost)

## XGBoost をフレームワークとして使用する
<a name="xgboost-how-to-framework"></a>

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

```
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: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-framework'
output_path = 's3://{}/{}/{}/output'.format(bucket, prefix, 'abalone-xgb-framework')

# construct a SageMaker AI XGBoost estimator
# specify the entry_point to your xgboost training script
estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", 
                    framework_version='1.7-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 AI XGBoost を使用するエンドツーエンドの例については、「[Regression with Amazon SageMaker AI XGBoost](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone_dist_script_mode.html)」を参照してください。

## XGBoost を組み込みアルゴリズムとして使用する
<a name="xgboost-how-to-built-in"></a>

次のコード例に示すように、XGBoost 組み込みアルゴリズムを使用して、XGBoost トレーニングコンテナを構築します。SageMaker AI `image_uris.retrieve` API を使用して、XGBoost 組み込みアルゴリズムイメージ URI を自動的に検出できます。[Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) バージョン 1 を使用している場合は、`get_image_uri` API を使用します。`image_uris.retrieve` API で正しい URI を確実に検出できるようにするには、[組み込みアルゴリズムの共通パラメータ](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)について参照してください。次に、組み込みアルゴリズムイメージ URI と使用可能なリージョンの完全なリストから `xgboost` を検索します。

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

**重要**  
SageMaker AI XGBoost イメージ URI を取得する場合は、イメージ URI タグに `:latest` または `:1` を使用しないでください。使用するネイティブ XGBoost パッケージバージョンの SageMaker AI が管理する XGBoost コンテナを選択するには、[サポートバージョン](xgboost.md#xgboost-supported-versions) のいずれかを指定する必要があります。SageMaker AI XGBoost コンテナに移行されたパッケージバージョンを確認するには、「[Docker Registry Paths and Example Code](https://docs.aws.amazon.com/sagemaker/latest/dg-ecr-paths/sagemaker-algo-docker-registry-paths.html)」を参照してください。次に、 AWS リージョンを選択し、「**XGBoost (algorithm)**」セクションに移動します。

```
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.7-1")

# construct a SageMaker AI 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 を組み込みアルゴリズムとして設定する方法の詳細については、次のノートブックの例を参照してください。
+ [Managed Spot Training for XGBoost](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_managed_spot_training.html)
+ [Regression with Amazon SageMaker AI XGBoost (Parquet input)](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_parquet_input_training.html)

## XGBoost アルゴリズムの入出力インターフェイス
<a name="InputOutput-XGBoost"></a>

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

SageMaker AI の XGBoost の実装では、トレーニングと推論に次のデータ形式が対応しています。
+  text/libsvm (default) 
+  text/csv
+  application/x-parquet
+  application/x-recordio-protobuf

**注記**  
トレーニングと推論の入力に関して注意すべき点がいくつかあります。  
パフォーマンスを高めるには、*ファイルモード*で XGBoost を使用することをお勧めします。このモードでは、Amazon S3 からのデータがトレーニングインスタンスボリュームに保存されます。
列指向入力によるトレーニングでは、アルゴリズムはターゲット変数 (ラベル) が最初の列であることを前提としています。推論の場合、アルゴリズムは入力にラベル列がないと見なします。
CSV データの場合、入力にヘッダーレコードを含めることはできません。
LIBSVM のトレーニングでは、アルゴリズムは、ラベル列の後の列に特徴のゼロベースのインデックス値のペアが含まれていると仮定します。そのため、各行は <label> <index0>:<value0> <index1>:<value1> の形式になります。
インスタンスタイプと分散トレーニングについては、「[XGBoost アルゴリズムの EC2 インスタンスに関する推奨事項](xgboost.md#Instance-XGBoost)」を参照してください。

CSV トレーニング入力モードの場合、アルゴリズムで使用できるメモリの合計でトレーニングデータセットを保持できる必要があります。使用可能な合計メモリは `Instance Count * the memory available in the InstanceType` で計算されます。libsvm トレーニング入力モードの場合、これは必須ではありませんが推奨されます。

v1.3-1 以降、SageMaker AI XGBoost は `Booster.save_model` を使用して XGBoost 内部バイナリ形式でモデルを保存します。以前のバージョンでは、モデルのシリアル化/逆シリアル化に Python の pickle モジュールを使用していました。

**注記**  
オープンソースの XGBoost で SageMaker AI XGBoost モデルを使用する場合は、バージョンに注意してください。バージョン 1.3-1 以降は XGBoost 内部バイナリ形式を使用していますが、以前のバージョンでは Python の pickle モジュールを使用しています。

**SageMaker AI XGBoost v1.3-1 以降でトレーニングされたモデルをオープンソースの XGBoost で使用する方法**
+ 次の Python コードを使用します。

  ```
  import xgboost as xgb
  
  xgb_model = xgb.Booster()
  xgb_model.load_model(model_file_path)
  xgb_model.predict(dtest)
  ```

**以前のバージョンの SageMaker AI 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 AI XGBoost では、各インスタンスに重み値を割り当てることで、ラベル付きデータポイントの重要性を区別できます。*text/libsvm* 入力の場合、顧客がデータインスタンスに重み値を割り当てるには、ラベルの後に重み値を付加します。例えば、`label:weight idx_0:val_0 idx_1:val_1...`。*text/csv* 入力の場合、顧客はパラメータで `csv_weights` フラグをオンにし、その列でラベルの後に重み値を付加する必要があります。例: `label,weight,val_0,val_1,...`)。

# XGBoost サンプルノートブック
<a name="xgboost-sample-notebooks"></a>

次の一覧は、Amazon SageMaker AI XGBoost アルゴリズムのさまざまなユースケースに対応する各種サンプル Jupyter Notebook を示しています。
+ [カスタム XGBoost コンテナを作成する方法](https://sagemaker-examples.readthedocs.io/en/latest/aws_sagemaker_studio/sagemaker_studio_image_build/xgboost_bring_your_own/Batch_Transform_BYO_XGB.html) – このノートブックでは、Amazon SageMaker AI Batch 変換を使用してカスタム XGBoost コンテナを構築する方法について説明しています。
+ [Parquet を使用した XGBoost でのリグレッション](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_parquet_input_training.html) – このノートブックでは、Parquet の Abalone データセットを使用して XGBoost モデルをトレーニングする方法について説明しています。
+ [多クラス分類モデルをトレーニングおよびホストする方法](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_mnist/xgboost_mnist.html) – このノートブックでは、MNIST データセットを使用して、多クラス分類モデルをトレーニングおよびホストする方法について説明しています。
+ [カスタマーチャーン予測のモデルをトレーニングする方法](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_applying_machine_learning/xgboost_customer_churn/xgboost_customer_churn.html) – このノートブックでは、不満を感じている顧客を特定するために、モバイルの顧客の離反を予測するモデルをトレーニングする方法について説明しています。
+ [XGBoost トレーニング用 Amazon SageMaker AI マネージドスポットインフラストラクチャの概要](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_managed_spot_training.html) – このノートブックでは、XGBoost コンテナでトレーニングにスポットインスタンスを使用する方法について説明しています。
+ [Amazon SageMaker Debugger を使用して XGBoost トレーニングジョブをデバッグする方法](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-debugger/xgboost_census_explanations/xgboost-census-debugger-rules.html) – このノートブックでは、Amazon SageMaker Debugger を使用して、トレーニングジョブをモニタリングし、組み込みのデバッグルールを使用して不整合を検出する方法について説明しています。

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

# SageMaker AI XGBoost アルゴリズムの仕組み
<a name="xgboost-HowItWorks"></a>

[XGBoost](https://github.com/dmlc/xgboost) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムで、より単純で弱いモデルのセットの推定を組み合わせることで、ターゲット変数の正確な予測を試行します。

リグレッションに[勾配ブースティング](https://en.wikipedia.org/wiki/Gradient_boosting)を使用すると、弱学習器がリグレッションツリーになり、各リグレッションツリーが、連続スコアが含まれる入力データポイントをいずれか 1 つのリーフにマッピングします。XGBoost は、モデル複雑さ (つまり回帰ツリーの関数) のために凸損失関数 (予測出力とターゲット出力の違いに基づく) とペナルティ項を組み合わせる、正規化された (L1 と L2) 目的関数を最小化します。トレーニングは反復的に進行し、前のツリーの残差やエラーを予測する新しいツリーを追加して、それを前のツリーと組み合わせることで最終的な予測を出します。これは、新しいモデルを追加するときに勾配降下アルゴリズムを使用して損失を最小限に抑えるため、勾配ブースティングと呼ばれます。

 以下の図に、勾配ツリーブースティングの仕組みを簡単に示します。

![\[勾配ツリーブースティングを示す図。\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/xgboost_illustration.png)


**XGBoost の詳細については、次の記事を参照してください。**
+ [XGBoost: A Scalable Tree Boosting System (XGBoost: スケーラブルツリーブーストシステム)](https://arxiv.org/pdf/1603.02754.pdf)
+ [勾配ツリーブースト](https://www.sas.upenn.edu/~fdiebold/NoHesitations/BookAdvanced.pdf#page=380)
+ [Introduction to Boosted Trees (ブーストツリーの概要)](https://xgboost.readthedocs.io/en/latest/tutorials/model.html)

# XGBoost のハイパーパラメータ
<a name="xgboost_hyperparameters"></a>

次の表には、Amazon SageMaker AI XGBoost アルゴリズムに必要な、または最も一般的に使用されるハイパーパラメータのサブセットが含まれています。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。SageMaker AI XGBoost アルゴリズムは、オープンソースの DMLC XGBoost パッケージの実装です。このバージョンの XGBoost に設定できるハイパーパラメータの完全なセットの詳細については、「[XGBoost パラメータ](https://xgboost.readthedocs.io/en/release_1.2.0/)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1class |  クラスの数。 `objective` が *multi:softmax* または *multi:softprob* に設定されている場合は**必須**。 有効な値: 整数。  | 
| num\$1round |  トレーニングを実行するラウンド数。 **必須** 有効な値: 整数。  | 
| alpha |  重みに対する L1 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数。 デフォルト値: 0  | 
| base\$1score |  すべてのインスタンスの初期予測スコア、全体的な偏り。 **オプション** 有効な値: 浮動小数点数。 デフォルト値: 0.5  | 
| booster |  使用するブースター。`gbtree` 値と `dart` 値はツリー型のモデルを使用し、`gblinear` は一次関数を使用します。 **オプション** 有効な値： 文字列。`"gbtree"`、`"gblinear"`、`"dart"` のいずれか 1 つ。 デフォルト値: `"gbtree"`  | 
| colsample\$1bylevel |  各レベルにおける、各分割の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| colsample\$1bynode |  各ノードの列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: (0,1]。 デフォルト値： 1  | 
| colsample\$1bytree |  各ツリーを構築する際の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| csv\$1weights |  このフラグを有効にすると、XGBoost は、トレーニングデータの 2 列目 (ラベルの後の列) をインスタンスの重みとして使用して、csv 入力のインスタンスの重要性を区別します。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| deterministic\$1histogram |  このフラグが有効になっている場合、XgBoost はヒストグラムを GPU 上で決定的に構築します。`tree_method` が `gpu_hist` に設定されている場合にのみ使用されます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値： 文字列。範囲: `"true"` または `"false"`。 デフォルト値: `"true"`  | 
| early\$1stopping\$1rounds |  検証スコアに改善が見られなくなるまでモデルのトレーニングが行われます。トレーニングを続行するには、少なくとも `early_stopping_rounds` ごとに検証エラーが減少する必要があります。SageMaker AI ホスティングは推論に最適なモデルを使用します。 **オプション** 有効な値: 整数。 デフォルト値: -  | 
| eta |  過剰適合を防ぐために更新で使用されるステップサイズの縮小。各ブースティングステップ後、新しい特徴の重みを直接取得できます。`eta` パラメータは実際に特徴の重みを縮小して、ブースティング処理をより控えめにします。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値: 0.3  | 
| eval\$1metric |  検証データの検証メトリクス。目標に応じてデフォルトのメトリクスが割り当てられます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/xgboost_hyperparameters.html) 有効な入力のリストについては、「[XGBoost Learning Task Parameters」(XGBoost ラーニングタスクのパラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。 **オプション** 有効な値： 文字列。 デフォルト値: 目標に基づくデフォルト  | 
| gamma |  ツリーのリーフノードに追加のパーティションを作成するために必要な損失低減の最小値。数値が大きいほど、アルゴリズムはより控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値: 0  | 
| grow\$1policy |  ツリーに新しいノードを追加する方法を制御します。現在、`tree_method` が `hist` に設定されている場合にのみサポートされます。 **オプション** 有効な値： 文字列。`"depthwise"` または `"lossguide"` です。 デフォルト値: `"depthwise"`  | 
| interaction\$1constraints |  やり取りが許可される変数のグループを指定します。 **オプション** 有効な値: ネストされた整数のリスト。各整数は特徴を表し、ネストされた各リストには、[[1,2], [3,4,5]] など、やり取りが許可される特徴が含まれています。 デフォルト値: なし  | 
| lambda |  重みに対する L2 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数。 デフォルト値： 1  | 
| lambda\$1bias |  偏りに対する L2 正規化項。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0  | 
| max\$1bin |  連続する特徴をバケットに入れる別個のビンの最大数。`tree_method` が `hist` に設定されている場合にのみ使用されます。 **オプション** 有効な値: 整数。 デフォルト値: 256  | 
| max\$1delta\$1step |  各ツリーの重みの推定に許可されるデルタステップの最大値。正の整数が使用されている場合、更新はより保守的になります。推奨されるオプションは、ロジスティック回帰での使用です。更新を制御しやすくするには、1 ～ 10 に設定します。 **オプション** 有効な値: 整数。範囲: [0,∞)。 デフォルト値: 0  | 
| max\$1depth |  ツリーの最大深度。この値を増やすとモデルがより複雑になり、過剰適合が発生しやすくなります。0 は無制限を示します。上限は `grow_policy` = `depth-wise` の場合に必須です。 **オプション** 有効な値: 整数。範囲: [0,∞) デフォルト値: 6  | 
| max\$1leaves |  追加されるノードの最大数。`grow_policy` が `lossguide` に設定されている場合にのみ関連します。 **オプション** 有効な値: 整数。 デフォルト値: 0  | 
| min\$1child\$1weight |  子に必要とされるインスタンスの重み (ヘッセ) の合計の最小値。ツリーのパーティション分割ステップにより、リーフノードのインスタンスの重みの合計が `min_child_weight` を下回る場合、構築処理は追加のパーティション分割を行わなくなります。線形回帰モデルでは、これは単に各ノードに必要とされるインスタンスの最小数に対応します。アルゴリズムが大きいほど、より控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値： 1  | 
| monotone\$1constraints |  任意の特徴に単調性の制約を指定します。 **オプション** 有効な値: 整数のタプル。有効な整数: -1 (制約の緩和)、0 (制約なし)、1 (制約の強化)。 (0, 1) など: 最初の予測子は制約なし、2 番目の予測子は制約の強化です。(-1、1): 最初の予測子は制約の緩和、2 番目の予測子は制約の強化です。 デフォルト値: (0, 0)  | 
| normalize\$1type |  正規化アルゴリズムの種類。 **オプション** 有効な値: *tree* または *forest* のいずれか。 デフォルト値: *tree*  | 
| nthread |  *xgboost* の実行に使用される並列スレッドの数。 **オプション** 有効な値: 整数。 デフォルト値: スレッドの最大数。  | 
| objective |  学習タスクと対応する学習目標を指定します。例: `reg:logistic`、`multi:softmax`、`reg:squarederror`。有効な入力の完全なリストについては、「[XGBoost Learning Task Parameters」(XGBoost パラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。 **オプション** 有効な値: 文字列 デフォルト値: `"reg:squarederror"`  | 
| one\$1drop |  このフラグを有効にすると、ドロップアウト中に常に 1 つ以上のツリーがドロップされます。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| process\$1type |  実行するブースティング処理の種類。 **オプション** 有効な値： 文字列。`"default"` または `"update"` です。 デフォルト値: `"default"`  | 
| rate\$1drop |  ドロップアウト中にドロップする、前のツリーの割合を指定するドロップアウト率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| refresh\$1leaf |  これは、'更新' アップデータープラグインのパラメータです。`true` (1) に設定すると、ツリーのリーフとツリーノードの統計情報が更新されます。`false` (0) に設定すると、ツリーノードの統計情報のみが更新されます。 **オプション** 有効な値: 0/1 デフォルト値： 1  | 
| sample\$1type |  サンプリングアルゴリズムの種類。 **オプション** 有効な値: `uniform` または `weighted`。 デフォルト値: `uniform`  | 
| scale\$1pos\$1weight |  正の重みと負の重みの均衡を制御します。不均衡なクラスに役立ちます。検討する一般的な値 :`sum(negative cases)` / `sum(positive cases)`。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1  | 
| seed |  乱数シード。 **オプション** 有効な値: 整数 デフォルト値: 0  | 
| single\$1precision\$1histogram |  このフラグが有効になっている場合、XGBoost は倍精度ではなく単精度を使用してヒストグラムを作成します。`tree_method` が `hist` または `gpu_hist` に設定されている場合にのみ使用されます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値： 文字列。範囲: `"true"` または `"false"` デフォルト値: `"false"`  | 
| sketch\$1eps |  近似貪欲アルゴリズムでのみ使用されます。これは、O(1 / `sketch_eps`) 個のビンに換算します。ビンの数を直接選択することと比較して、これはスケッチの精度により理論的に保証されます。 **オプション** 有効な値: 浮動小数点: [0, 1]。 デフォルト値: 0.03  | 
| skip\$1drop |  ブースティングの反復中にドロップアウト手順をスキップする確率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| subsample |  トレーニングインスタンスのサブサンプル率。0.5 に設定すると、XGBoost はツリーの成長にデータインスタンスの半分をランダムに収集します。これにより、過剰適合を防ぎます。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| tree\$1method |  XGBoost で使用されるツリー構造アルゴリズム。 **オプション** 有効な値: `auto`、`exact`、`approx`、`hist`、`gpu_hist` のいずれか。 デフォルト値: `auto`  | 
| tweedie\$1variance\$1power |  Tweedie 分布の分散を制御するパラメータ。 **オプション** 有効な値: 浮動小数点数。範囲: (1, 2)。 デフォルト値: 1.5  | 
| updater |  ツリーアップデーターが実行される順序を定義するカンマ区切りの文字列。これにより、モジュール式にツリーを構築および修正できます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値: カンマ区切りの文字列。 デフォルト値: `grow_colmaker`、prune  | 
| use\$1dask\$1gpu\$1training |  Dask で分散 GPU トレーニングを実行する場合は `use_dask_gpu_training` を `"true"` に設定します。Dask GPU トレーニングはバージョン 1.5-1 以降でのみサポートされています。1.5-1 より前のバージョンでは、この値を `"true"` に設定しないでください。詳細については、「[分散 GPU トレーニング](xgboost.md#Instance-XGBoost-distributed-training-gpu)」を参照してください。 **オプション** 有効な値： 文字列。範囲: `"true"` または `"false"` デフォルト値: `"false"`  | 
| verbosity | メッセージ出力の詳細レベル。 有効な値: 0 (サイレント)、1 (警告)、2 (情報)、3 (デバッグ)。 **オプション** デフォルト値： 1  | 

# XGBoost モデルを調整する
<a name="xgboost-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**次の 3 つのタイプのハイパーパラメータを選択します。
+ モデルトレーニング中に最適化する学習 `objective` 関数
+ 検証中にモデルのパフォーマンスを評価するために使用する `eval_metric`
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

アルゴリズムが計算する一連の評価メトリクスから評価メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

**注記**  
XGBoost 0.90 の自動モデル調整は、Amazon SageMaker SDK からのみ使用できます。SageMaker AI コンソールから使用することはできません。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

## XGBoost アルゴリズムで計算される評価メトリクス
<a name="xgboost-metrics"></a>

XGBoost アルゴリズムは、モデルの検証に次のメトリクスを使用して計算します。モデルを調整するときに、これらのいずれかのメトリクスを選択してモデルを評価します。有効な `eval_metric` 値の完全なリストについては、「[XGBoost Learning Task Parameters」(XGBoost ラーニングタスクのパラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:accuracy |  分類率。\$1(right)/\$1(all cases) として計算されます。  |  最大化  | 
| validation:auc |  曲線下面積。  |  最大化  | 
| validation:error |  \$1(誤ったケース)/\$1(すべてのケース) で計算される二項分類誤り率。  |  最小化  | 
| validation:f1 |  分類精度の指標。精度とリコールの調和平均として計算されます。  |  最大化  | 
| validation:logloss |  負の対数尤度。  |  最小化  | 
| validation:mae |  平均絶対誤差。  |  最小化  | 
| validation:map |  平均精度の平均。  |  最大化  | 
| validation:merror |  \$1(誤ったケース)/\$1(すべてのケース) で計算される複数クラス分類誤り率。  |  最小化  | 
| validation:mlogloss |  複数クラス分類の負の対数尤度。  |  最小化  | 
| validation:mse |  平均二乗誤差。  |  最小化  | 
| validation:ndcg |  正規化減損累積利得。  |  最大化  | 
| validation:rmse |  二乗平均平方根誤差。  |  最小化  | 

## 調整可能な XGBoost ハイパーパラメータ
<a name="xgboost-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して XGBoost モデルを調整します。XGBoost のメトリクスに最も影響を与えるハイパーパラメータは、`alpha`、`min_child_weight`、`subsample`、`eta`、`num_round` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| alpha |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| colsample\$1bylevel |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 1  | 
| colsample\$1bynode |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 1  | 
| colsample\$1bytree |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 
| eta |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 0.5  | 
| gamma |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 5  | 
| lambda |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| max\$1delta\$1step |  IntegerParameterRanges  |  [0, 10]  | 
| max\$1depth |  IntegerParameterRanges  |  [0, 10]  | 
| min\$1child\$1weight |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 120  | 
| num\$1round |  IntegerParameterRanges  |  [1, 4000]  | 
| subsample |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 

# XGBoost の非推奨バージョンとそのアップグレード
<a name="xgboost-previous-versions"></a>

このトピックには、Amazon SageMaker AI XGBoost の以前のバージョンに関するドキュメントが含まれています。このドキュメントは引き続き利用可能ですが、推奨されていません。また、可能な場合に XGBoost の非推奨バージョンを最新バージョンにアップグレードする方法についても説明します。

**Topics**
+ [XGBoost バージョン 0.90 をバージョン 1.5 にアップグレードする](xgboost-version-0.90.md)
+ [XGBoost バージョン 0.72](xgboost-72.md)

# XGBoost バージョン 0.90 をバージョン 1.5 にアップグレードする
<a name="xgboost-version-0.90"></a>

SageMaker Python SDK を使用している場合、既存の XGBoost 0.90 ジョブをバージョン 1.5 にアップグレードするには、バージョン 2.x の SDK をインストールし、XGBoost `version` と `framework_version` パラメータを 1.5-1 に変更する必要があります。Boto3 を使用している場合、Docker イメージと、いくつかのハイパーパラメータと学習目標を更新する必要があります。

**Topics**
+ [SageMaker AI Python SDK バージョン 1.x をバージョン 2.x にアップグレードする](#upgrade-xgboost-version-0.90-sagemaker-python-sdk)
+ [イメージタグを 1.5-1 に変更する](#upgrade-xgboost-version-0.90-change-image-tag)
+ [boto3 の Docker イメージを変更する](#upgrade-xgboost-version-0.90-boto3)
+ [ハイパーパラメータと学習目標を更新する](#upgrade-xgboost-version-0.90-hyperparameters)

## SageMaker AI Python SDK バージョン 1.x をバージョン 2.x にアップグレードする
<a name="upgrade-xgboost-version-0.90-sagemaker-python-sdk"></a>

SageMaker Python SDK のバージョン 1.x をまだ使用している場合、SageMaker Python SDK のバージョン 2.x をアップグレードする必要があります。SageMaker Python SDK の最新バージョンの詳細については、「[Use Version 2.x of the SageMaker Python SDK」(SageMaker Python SDK のバージョン 2.x を使用する](https://sagemaker.readthedocs.io/en/stable/v2.html)) を参照してください。最新バージョンをインストールするには、次を実行します。

```
python -m pip install --upgrade sagemaker
```

## イメージタグを 1.5-1 に変更する
<a name="upgrade-xgboost-version-0.90-change-image-tag"></a>

SageMaker Python SDK を使用して XGBoost ビルドインアルゴリズムを使用している場合、`image_uris.retrive` でバージョンパラメータを変更します。

```
from sagemaker import image_uris
image_uris.retrieve(framework="xgboost", region="us-west-2", version="1.5-1")

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)
```

SageMaker Python SDK を使用して XGBoost をフレームワークとして使用し、カスタマイズされたトレーニングスクリプトを実行する場合、XGBoost API で `framework_version` パラメータを変更します。

```
estimator = XGBoost(entry_point = "your_xgboost_abalone_script.py", 
                    framework_version='1.5-1',
                    hyperparameters=hyperparameters,
                    role=sagemaker.get_execution_role(),
                    instance_count=1,
                    instance_type='ml.m5.2xlarge',
                    output_path=output_path)
```

SageMaker Python SDK バージョン 1.x の `sagemaker.session.s3_input` は `sagemaker.inputs.TrainingInput` に名前が変更されています。次の例のように、`sagemaker.inputs.TrainingInput` を使用する必要があります。

```
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)
```

 SageMaker Python SDK バージョン 2.x の変更点の詳細なリストについては、「[Use Version 2.x of the SageMaker Python SDK」(SageMaker Python SDK のバージョン 2.x を使用する](https://sagemaker.readthedocs.io/en/stable/v2.html)) を参照してください。

## boto3 の Docker イメージを変更する
<a name="upgrade-xgboost-version-0.90-boto3"></a>

Boto3 を使用してモデルをトレーニングまたはデプロイする場合、docker イメージタグ (1、0.72、0.90-1 または 0.90-2) を 1.5-1 に変更します。

```
{
    "AlgorithmSpecification":: {
        "TrainingImage": "746614075791.dkr.ecr.us-west-1.amazonaws.com/sagemaker-xgboost:1.5-1"
    }
    ...
}
```

SageMaker Python SDK を使用してレジストリパスを取得する場合、`image_uris.retrieve` で `version` パラメータを変更します。

```
from sagemaker import image_uris
image_uris.retrieve(framework="xgboost", region="us-west-2", version="1.5-1")
```

## ハイパーパラメータと学習目標を更新する
<a name="upgrade-xgboost-version-0.90-hyperparameters"></a>

サイレントパラメータは廃止され、XGBoost 1.5 以降のバージョンでは使用できなくなりました。代わりに `verbosity` を使用します。`reg:linear` 学習目標を使用していた場合、これも同様に廃止され、` reg:squarederror` に置き換えられます。代わりに `reg:squarederror` を使用します。

```
hyperparameters = {
    "verbosity": "2",
    "objective": "reg:squarederror",
    "num_round": "50",
    ...
}

estimator = sagemaker.estimator.Estimator(image_uri=xgboost_container, 
                                          hyperparameters=hyperparameters,
                                          ...)
```

# XGBoost バージョン 0.72
<a name="xgboost-72"></a>

**重要**  
XGBoost 0.72 は Amazon SageMaker AI で廃止されます。この古いバージョンの XGBoost は、次のコードサンプルに示すように、そのイメージ URI をプルすることで引き続き組み込みアルゴリズムとして使用できます。XGBoost の場合、`:1` で終わるイメージ URI は古いバージョン用です。  

```
import boto3
from sagemaker.amazon.amazon_estimator import get_image_uri

xgb_image_uri = get_image_uri(boto3.Session().region_name, "xgboost", repo_version="1")
```

```
import boto3
from sagemaker import image_uris

xgb_image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "1")
```
新しいバージョンを使用する場合、イメージ URI タグを明示的に指定する必要があります (「[サポートバージョン](xgboost.md#xgboost-supported-versions)」を参照)。

この以前の Amazon SageMaker AI XGBoost アルゴリズムのリリースは、0.72 リリースに基づいています。[XGBoost](https://github.com/dmlc/xgboost) (eXtreme Gradient Boosting) は、勾配ブーストツリーアルゴリズムのよく知られた効率的なオープンソースの実装です。勾配ブースティングは教師あり学習アルゴリズムで、より単純で弱いモデルのセットの推定を組み合わせることで、ターゲット変数の正確な予測を試行します。XGBoost は、各種データタイプ、信頼関係、ディストリビューション、およびニーズに合わせて切り替え、調整できる大量のハイパーパラメータを堅牢に処理できるため、機械学習のコンペティションにおいて非常に優れた結果を出しています。この柔軟性により、XGBoost が回帰、分類 (バイナリとマルチクラス)、ランキングの問題に対して推奨される選択肢になります。

お客様は、[Amazon SageMaker AI の XGBoost アルゴリズム](xgboost.md) の新しいリリースの使用を検討する必要があります。例えば、Tensorflow 深層学習フレームワークで通常行うように、SageMaker AI 組み込みのアルゴリズムとして、またはローカル環境でスクリプトを実行するフレームワークとして使用できます。この新しい実装では、メモリのフットプリントは縮小し、ロギングは強化され、ハイパーパラメータ検証は向上し、メトリクスセットは拡張されています。新しいバージョンへの移行を先延ばしにする必要がある場合は、XGBoost の以前の実装を引き続き利用することができます。ただし、この以前の実装は、XGBoost の 0.72 リリースに関連付けられたままになります。

## XGBoost リリース 0.72 の入出力インターフェイス
<a name="xgboost-72-InputOutput"></a>

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

SageMaker AI の 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 データ形式とより一貫性を保つためにトレーニングの入力にプロトコルバッファ形式を使用する、SageMaker AI の他のアルゴリズムとは異なります。

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

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

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

## XGBoost リリース 0.72 の EC2 インスタンスに関する推奨事項
<a name="xgboost-72-Instance"></a>

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

## XGBoost リリース 0.72 のサンプルノートブック
<a name="xgboost-72-sample-notebooks"></a>

回帰モデルをトレーニングおよびホストする組み込みアルゴリズムとして、最新バージョンの SageMaker AI XGBoost を使用する方法を示すサンプルノートブックについては、「[Regression with Amazon SageMaker AI XGBoost algorithm](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/xgboost_abalone/xgboost_abalone.html)」を参照してください。XGBoost の 0.72 バージョンを使用するには、サンプルコードのバージョンを 0.72 に変更する必要があります。SageMaker AI でサンプルを実行するために使用できる Jupyter ノートブックインスタンスを作成してアクセスする方法の詳細については、「[Amazon SageMaker ノートブックインスタンス](nbi.md)」を参照してください。ノートブックインスタンスを作成して開いたら、**[SageMaker AI サンプル]** タブを選択して、すべての SageMaker AI サンプルのリストを表示します。XGBoost アルゴリズムを使用したトピックモデリングのサンプルノートブックは、[**Introduction to Amazon algorithm (Amazon アルゴリズムの概要)**] セクションにあります。ノートブックを開くには、その [**Use (使用)**] タブをクリックして [**Create copy (コピーを作成)**] を選択します。

## XGBoost リリース 0.72 のハイパーパラメータ
<a name="xgboost-72-hyperparameters"></a>

XGBoost アルゴリズムのハイパーパラメータを以下の表に示します。これらは、データからモデルパラメータを推定しやすくするためにユーザが設定するパラメータです。設定の必要がある必須ハイパーパラメータは、アルファベット順に最初に一覧表示されています。設定可能なオプションのハイパーパラメータは、アルファベット順に次に一覧表示されています。SageMaker AI XGBoost アルゴリズムは、オープンソースの XGBoost パッケージの実装です。現在、SageMaker AI はバージョン 0.72 をサポートしています。このバージョンの XGBoost のハイパーパラメータ設定の詳細については、「[XGBoost パラメータ](https://xgboost.readthedocs.io/en/release_0.72/parameter.html)」を参照してください。


| Parameter Name | 説明 | 
| --- | --- | 
| num\$1class | クラスの数。 `objective` が *multi:softmax* または *multi:softprob* に設定されている場合は**必須**。 有効な値: 整数  | 
| num\$1round | トレーニングを実行するラウンド数。 **必須** 有効な値: 整数  | 
| alpha | 重みに対する L1 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0  | 
| base\$1score | すべてのインスタンスの初期予測スコア、全体的な偏り。 **オプション** 有効な値: 浮動小数点数 デフォルト値: 0.5  | 
| booster | 使用するブースター。`gbtree` 値と `dart` 値はツリー型のモデルを使用し、`gblinear` は一次関数を使用します。 **オプション** 有効な値： 文字列。`gbtree`、`gblinear`、`dart` のいずれか 1 つ。 デフォルト値: `gbtree`  | 
| colsample\$1bylevel | 各レベルにおける、各分割の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| colsample\$1bytree | 各ツリーを構築する際の列のサブサンプル率。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1 | 
| csv\$1weights | このフラグを有効にすると、XGBoost は、トレーニングデータの 2 列目 (ラベルの後の列) をインスタンスの重みとして使用して、csv 入力のインスタンスの重要性を区別します。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| early\$1stopping\$1rounds | 検証スコアに改善が見られなくなるまでモデルのトレーニングが行われます。トレーニングを続行するには、少なくとも `early_stopping_rounds` ごとに検証エラーが減少する必要があります。SageMaker AI ホスティングは推論に最適なモデルを使用します。 **オプション** 有効な値: 整数 デフォルト値: -  | 
| eta | 過剰適合を防ぐために更新で使用されるステップサイズの縮小。各ブースティングステップ後、新しい特徴の重みを直接取得できます。`eta` パラメータは実際に特徴の重みを縮小して、ブースティング処理をより控えめにします。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値: 0.3  | 
| eval\$1metric | 検証データの検証メトリクス。目標に応じてデフォルトのメトリクスが割り当てられます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/xgboost-72.html) 有効な入力のリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters) を参照してください。 **オプション** 有効な値: 文字列 デフォルト値: 目標に基づくデフォルト  | 
| gamma | ツリーのリーフノードに追加のパーティションを作成するために必要な損失低減の最小値。数値が大きいほど、アルゴリズムはより控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値: 0  | 
| grow\$1policy | ツリーに新しいノードを追加する方法を制御します。現在、`tree_method` が `hist` に設定されている場合にのみサポートされます。 **オプション** 有効な値： 文字列。`depthwise` または `lossguide` です。 デフォルト値: `depthwise`  | 
| lambda | 重みに対する L2 正規化項。この値を大きくすると、モデルがより控えめになります。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1  | 
| lambda\$1bias | 偏りに対する L2 正規化項。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0  | 
| max\$1bin | 連続する特徴をバケットに入れる別個のビンの最大数。`tree_method` が `hist` に設定されている場合にのみ使用されます。 **オプション** 有効な値: 整数 デフォルト値: 256  | 
| max\$1delta\$1step | 各ツリーの重みの推定に許可されるデルタステップの最大値。正の整数が使用されている場合、更新はより保守的になります。推奨されるオプションは、ロジスティック回帰での使用です。更新を制御しやすくするには、1 ～ 10 に設定します。 **オプション** 有効な値: 整数。範囲: [0,∞)。 デフォルト値: 0  | 
| max\$1depth | ツリーの最大深度。この値を増やすとモデルがより複雑になり、過剰適合が発生しやすくなります。0 は無制限を示します。上限は `grow_policy` = `depth-wise` の場合に必須です。 **オプション** 有効な値: 整数。範囲: [0,∞) デフォルト値: 6  | 
| max\$1leaves | 追加されるノードの最大数。`grow_policy` が `lossguide` に設定されている場合にのみ関連します。 **オプション** 有効な値: 整数 デフォルト値: 0  | 
| min\$1child\$1weight | 子に必要とされるインスタンスの重み (ヘッセ) の合計の最小値。ツリーのパーティション分割ステップにより、リーフノードのインスタンスの重みの合計が `min_child_weight` を下回る場合、構築処理は追加のパーティション分割を行わなくなります。線形回帰モデルでは、これは単に各ノードに必要とされるインスタンスの最小数に対応します。アルゴリズムが大きいほど、より控えめになります。 **オプション** 有効な値: 浮動小数点数。範囲: [0,∞)。 デフォルト値： 1  | 
| normalize\$1type | 正規化アルゴリズムの種類。 **オプション** 有効な値: *tree* または *forest* のいずれか。 デフォルト値: *tree*  | 
| nthread | *xgboost* の実行に使用される並列スレッドの数。 **オプション** 有効な値: 整数 デフォルト値: スレッドの最大数。  | 
| objective | 学習タスクと対応する学習目標を指定します。例: `reg:logistic`、`reg:softmax`、`multi:squarederror`。有効な入力の完全なリストについては、「[XGBoost パラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)」を参照してください。 **オプション** 有効な値: 文字列 デフォルト値: `reg:squarederror`  | 
| one\$1drop | このフラグを有効にすると、ドロップアウト中に常に 1 つ以上のツリーがドロップされます。 **オプション** 有効な値: 0 または 1 デフォルト値: 0  | 
| process\$1type | 実行するブースティング処理の種類。 **オプション** 有効な値： 文字列。`default` または `update` です。 デフォルト値: `default`  | 
| rate\$1drop | ドロップアウト中にドロップする、前のツリーの割合を指定するドロップアウト率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| refresh\$1leaf | これは、'更新' アップデータープラグインのパラメータです。`true` (1) に設定すると、ツリーのリーフとツリーノードの統計情報が更新されます。`false` (0) に設定すると、ツリーノードの統計情報のみが更新されます。 **オプション** 有効な値: 0/1 デフォルト値： 1  | 
| sample\$1type | サンプリングアルゴリズムの種類。 **オプション** 有効な値: `uniform` または `weighted`。 デフォルト値: `uniform`  | 
| scale\$1pos\$1weight | 正の重みと負の重みの均衡を制御します。不均衡なクラスに役立ちます。検討する一般的な値 :`sum(negative cases)` / `sum(positive cases)`。 **オプション** 有効な値: 浮動小数点数 デフォルト値： 1  | 
| seed | 乱数シード。 **オプション** 有効な値: 整数 デフォルト値: 0  | 
| silent | 0 は実行中のメッセージを出力する、1 はサイレントモードを意味します。 有効な値: 0 または 1 **オプション** デフォルト値: 0  | 
| sketch\$1eps | 近似貪欲アルゴリズムでのみ使用されます。これは、O(1 / `sketch_eps`) 個のビンに換算します。ビンの数を直接選択することと比較して、これはスケッチの精度により理論的に保証されます。 **オプション** 有効な値: 浮動小数点: [0, 1]。 デフォルト値: 0.03  | 
| skip\$1drop | ブースティングの反復中にドロップアウト手順をスキップする確率。 **オプション** 有効な値: 浮動小数点数。範囲: [0.0, 1.0]。 デフォルト値: 0.0  | 
| subsample | トレーニングインスタンスのサブサンプル率。0.5 に設定すると、XGBoost はツリーの成長にデータインスタンスの半分をランダムに収集します。これにより、過剰適合を防ぎます。 **オプション** 有効な値: 浮動小数点数。範囲: [0,1]。 デフォルト値： 1  | 
| tree\$1method | XGBoost で使用されるツリー構造アルゴリズム。 **オプション** 有効な値: `auto`、`exact`、`approx`、`hist` のいずれか。 デフォルト値: `auto`  | 
| tweedie\$1variance\$1power | Tweedie 分布の分散を制御するパラメータ。 **オプション** 有効な値: 浮動小数点数。範囲: (1, 2)。 デフォルト値: 1.5  | 
| updater | ツリーアップデーターが実行される順序を定義するカンマ区切りの文字列。これにより、モジュール式にツリーを構築および修正できます。 有効な入力の完全なリストについては、[XGBoost Parameters (XGBoost パラメータ)](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst) を参照してください。 **オプション** 有効な値: カンマ区切りの文字列。 デフォルト値: `grow_colmaker`、prune  | 

## XGBoost リリース 0.72 モデルの調整
<a name="xgboost-72-tuning"></a>

自動モデル調整は、ハイパーパラメータ調整とも呼ばれ、データセットのトレーニングと検証でさまざまなハイパーパラメータをテストする多数のジョブを実行して、モデルの最適なバージョンを見つけます。**次の 3 つのタイプのハイパーパラメータを選択します。
+ モデルトレーニング中に最適化する学習 `objective` 関数
+ 検証中にモデルのパフォーマンスを評価するために使用する `eval_metric`
+ モデルの自動調整時に使用する一連のハイパーパラメータとそれぞれの値の範囲

アルゴリズムが計算する一連の評価メトリクスから評価メトリクスを選択します。自動モデル調整は、選択されたハイパーパラメータを検索して、評価メトリクスを最適化するモデルになる値の組み合わせを見つけます。

モデル調整の詳細については、「[SageMaker AI の自動モデルチューニング](automatic-model-tuning.md)」を参照してください。

### XGBoost リリース 0.72 アルゴリズムで計算されるメトリクス
<a name="xgboost-72-metrics"></a>

バージョン 0.72 の XGBoost アルゴリズムは、モデルの検証に次の 9 つのメトリクスを計算します。モデルを調整するときに、これらのいずれかのメトリクスを選択してモデルを評価します。有効な `eval_metric` 値の完全なリストについては、「[XGBoost Learning Task Parameters」(XGBoost ラーニングタスクのパラメータ](https://github.com/dmlc/xgboost/blob/master/doc/parameter.rst#learning-task-parameters)) を参照してください。


| メトリクス名 | 説明 | 最適化の方向 | 
| --- | --- | --- | 
| validation:auc |  曲線下面積。  |  最大化  | 
| validation:error |  \$1(誤ったケース)/\$1(すべてのケース) で計算される二項分類誤り率。  |  最小化  | 
| validation:logloss |  負の対数尤度。  |  最小化  | 
| validation:mae |  平均絶対誤差。  |  最小化  | 
| validation:map |  平均精度の平均。  |  最大化  | 
| validation:merror |  \$1(誤ったケース)/\$1(すべてのケース) で計算される複数クラス分類誤り率。  |  最小化  | 
| validation:mlogloss |  複数クラス分類の負の対数尤度。  |  最小化  | 
| validation:ndcg |  正規化減損累積利得。  |  最大化  | 
| validation:rmse |  二乗平均平方根誤差。  |  最小化  | 

### 調整可能な XGBoost リリース 0.72 のハイパーパラメータ
<a name="xgboost-72-tunable-hyperparameters"></a>

以下のハイパーパラメータを使用して XGBoost モデルを調整します。XGBoost のメトリクスに最も影響を与えるハイパーパラメータは、`alpha`、`min_child_weight`、`subsample`、`eta`、`num_round` です。


| パラメータ名 | パラメータタイプ | 推奨範囲 | 
| --- | --- | --- | 
| alpha |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| colsample\$1bylevel |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 1  | 
| colsample\$1bytree |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 
| eta |  ContinuousParameterRanges  |  MinValue: 0.1、MaxValue: 0.5  | 
| gamma |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 5  | 
| lambda |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 1000  | 
| max\$1delta\$1step |  IntegerParameterRanges  |  [0, 10]  | 
| max\$1depth |  IntegerParameterRanges  |  [0, 10]  | 
| min\$1child\$1weight |  ContinuousParameterRanges  |  MinValue: 0、MaxValue: 120  | 
| num\$1round |  IntegerParameterRanges  |  [1, 4000]  | 
| subsample |  ContinuousParameterRanges  |  MinValue: 0.5、MaxValue: 1  | 