XGBoost(eXtreme Gradient Boosting)は、使いやすさと堅牢性を向上させた勾配ブースティングアルゴリズムです。機械学習の本番システムおよび競技会の両方で広く採用されています。XGBoost は分類および回帰タスクをサポートします。
Platform for AI(PAI)における XGBoost トレーニングコンポーネントは、オープンソースの XGBoost ライブラリを基盤として最適化されており、操作性および PAI プラットフォームとの互換性が向上しています。本トピックでは、XGBoost トレーニングコンポーネントの構成方法について説明します。
制限事項
XGBoost トレーニングコンポーネントは、以下の計算リソース上で実行されます:
MaxCompute
Flink
Deep Learning Containers(DLC)
データ形式
このコンポーネントは、テーブル形式または LibSVM 形式のデータを受け付けます。使用する形式は、フィールド設定 タブのパラメーターで指定します:テーブル形式の場合は featureCols を、LibSVM 形式の場合は vectorCol を使用します。これらの 2 つのパラメーターは相互排他です。
テーブル形式
テーブル形式では、各行が 1 つのデータインスタンスを表します。列には特徴値とラベルが含まれます。
| f0 | f1 | label |
|---|---|---|
| 0.1 | 1 | 0 |
| 0.9 | 2 | 1 |
LibSVM 形式
LibSVM 形式では、各行に疎な特徴値ペアが含まれます。各エントリは index:value 表記を使用します。以下の例は、サンプルの LibSVM データを示しています:
2:1 9:1 10:1 20:1 29:1 33:1 35:1 39:1 40:1 52:1 57:1 64:1 68:1 76:1 85:1 87:1 91:1 94:1 101:1 104:1 116:1 123:1
0:1 9:1 18:1 20:1 23:1 33:1 35:1 38:1 41:1 52:1 55:1 64:1 68:1 76:1 85:1 87:1 91:1 94:1 101:1 105:1 115:1 121:1
2:1 8:1 18:1 20:1 29:1 33:1 35:1 39:1 41:1 52:1 57:1 64:1 68:1 76:1 85:1 87:1 91:1 94:1 101:1 104:1 116:1 123:1
2:1 9:1 13:1 21:1 28:1 33:1 36:1 38:1 40:1 53:1 57:1 64:1 68:1 76:1 85:1 87:1 91:1 94:1 97:1 105:1 113:1 119:1
0:1 9:1 18:1 20:1 22:1 33:1 35:1 38:1 44:1 52:1 55:1 64:1 68:1 76:1 85:1 87:1 91:1 94:1 101:1 104:1 115:1 121:1
0:1 8:1 18:1 20:1 23:1 33:1 35:1 38:1 41:1 52:1 55:1 64:1 68:1 76:1 85:1 87:1 91:1 94:1 101:1 105:1 116:1 121:1PAI コンソールでのコンポーネントの構成
XGBoost トレーニングコンポーネントは、Machine Learning Designer で構成できます。パラメーターは、以下の 3 つのタブに分類されています:
フィールド設定:入力データ構造およびモデル保存先を定義します。
パラメーター設定:XGBoost トレーニングアルゴリズムの動作を制御します。
実行チューニング:分散トレーニングリソースを構成します。
フィールド設定
| パラメーター | 型 | 説明 |
|---|---|---|
| labelCol | String | ラベル列。 |
| featureCols | String 配列 | テーブル形式の特徴列。このパラメーターは vectorCol と相互排他です。featureCols を指定した場合、入力データはテーブル形式である必要があります。 |
| vectorCol | String | LibSVM 形式のベクター列。このパラメーターは featureCols と相互排他です。vectorCol を指定した場合、入力データは LibSVM 形式である必要があります。 |
| weightCol | String | 重み列の名前。 |
| モデルファイルパスの設定 | String | 学習済みモデルを保存する Object Storage Service(OSS)バケットのパス。 |
パラメーター設定
これらのパラメーターは、トレーニング動作を制御する標準的な XGBoost ハイパーパラメーターに対応しています。
トレーニング目的
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
| ブースティングの反復回数 | Integer | -- | トレーニング反復回数(ブースティング反復回数)。 |
| objective | String | binary:logistic | 学習タスクおよび対応する学習目的。 |
| ベーススコア | 浮動小数点数 | 0.5 | グローバルなバイアスであり、すべてのインスタンスに対する初期予測スコアとして機能します。 |
| クラス数 | Integer | -- | 多クラス分類タスクにおけるクラス数。 |
ツリー構築
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
| ツリーメソッド | String | auto | ツリー構築アルゴリズム。有効な値: auto、exact、approx、hist。 |
| ツリーの最大深さ | Integer | 6 | 各ツリーの最大深さ。この値を増加させると、モデルが複雑になり、過学習しやすくなります。 |
| 最大リーフ数 | Integer | 0 | 追加するリーフノードの最大数。値が 0 の場合、制限はありません。 |
| 成長ポリシー | String | depthwise | ツリーへの新規ノード追加戦略。有効な値: depthwise、lossguide。 |
| 連続特徴をビニングする際の離散ビンの最大数 | Integer | 256 | 連続特徴をビニングする際の離散ビンの最大数。ツリーメソッド が hist に設定されている場合にのみ有効です。 |
| sketch_eps | 浮動小数点数 | 0.03 | スケッチングアルゴリズムにおけるビン数を制御します。ツリーメソッド が approx に設定されている場合にのみ有効です。 |
正則化
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
| 重みに対する L1 正則化項 | 浮動小数点数 | 0.0 | 重みに対する L1 正則化項。値が大きいほど、より保守的なモデルになります。 |
| 重みに対する L2 正則化項 | 浮動小数点数 | 1.0 | 重みに対する L2 正則化項。値が大きいほど、より保守的なモデルになります。 |
| gamma | 浮動小数点数 | 0.0 | ツリーのリーフノードをさらに分割するために必要な最小損失低減量。 |
| 子ノードの最小重み | 浮動小数点数 | 1.0 | 子ノードに必要なインスタンス重みの合計の最小値。 |
| 最大デルタステップ | 浮動小数点数 | 0.0 | 各リーフノードで許容される最大デルタステップ。このパラメーターにより、モデル更新の粒度を調整できます。 |
学習率およびサンプリング
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
| eta | 浮動小数点数 | 0.3 | 学習率。値が小さいほどモデルの堅牢性が高まりますが、より多くのブースティング反復回数が必要になります。 |
| scale_pos_weight | 浮動小数点数 | 1.0 | 正のクラスと負のクラスの重みをバランスさせるための比率。不均衡なデータセットに有用です。 |
| トレーニングインスタンスのサブサンプル比率 | 浮動小数点数 | 1 | 各ブースティング反復の前にサンプリングするトレーニングインスタンスの割合。 |
| サンプリング方法 | String | GRADIENT_BASED | トレーニングインスタンスのサンプリング方法。有効な値: GRADIENT_BASED、UNIFORM。 |
| 各レベルでの列のサブサンプル比率 | 浮動小数点数 | 1.0 | 各ツリーレベルでサンプリングする列の割合。 |
| 各ノード(分割)での列のサブサンプル比率 | 浮動小数点数 | 1.0 | 各ノード分割でサンプリングする列の割合。 |
| 各ツリー構築時の列のサブサンプル比率 | 浮動小数点数 | 1.0 | 各ツリー構築時にサンプリングする列の割合。 |
制約および分布
| パラメーター | 型 | デフォルト | 説明 |
|---|---|---|---|
| インタラクション制約 | String | -- | 相互にインタラクト可能な変数のグループ。 |
| 単調性制約 | String | -- | 各特徴に対する単調性制約。 |
| Tweedie 分散パワーパラメーター | 浮動小数点数 | 1.5 | Tweedie 分布の分散。このパラメーターは、目的関数が Tweedie 分布を使用する場合にのみ有効です。 |
実行チューニング
| パラメーター | 型 | 有効値 | 説明 |
|---|---|---|---|
| ワーカー数 | 正の整数 | [1, 9999] | ワーカーノードの数。ワーカーあたりのメモリ(MB 単位) と併せて構成します。 |
| ワーカーあたりのメモリ(MB 単位) | 正の整数 | [1024, 64 × 1024] | 各ワーカーノードに割り当てるメモリ量(MB 単位)。 |
操作手順
本セクションでは、ヒッグスボソン分類の例を通じて、Machine Learning Designer における XGBoost トレーニングコンポーネントの使用方法を説明します。この例のパイプラインは、プリセットテンプレートから構築されています。テンプレート「XGBoost アルゴリズムを用いたヒッグスボソンの識別」からパイプラインを作成する方法については、「プリセットテンプレートからのパイプライン作成」をご参照ください。
評価用に出力形式を変換
XGBoost トレーニングコンポーネントは、オープンソースの XGBoost ライブラリが出力する JSON オブジェクトをシリアル化した JSON 文字列を生成します。モデル予測を評価するには、この出力を評価コンポーネントが処理可能な形式に変換する必要があります。
このために、XGBoost Predict コンポーネントの後続コンポーネントとして、SQL スクリプト コンポーネントを追加します。SQL スクリプトコンポーネントは、予測出力を バイナリ分類評価 V2 コンポーネントで要求される形式に変換します。以下の SQL コードを使用します:
set odps.sql.udf.getjsonobj.new=true;
select *, CONCAT("{\"0\":", 1.0-prob, ",\"1\":", prob, "}") as detail
FROM (
select *, cast(get_json_object(pred, '$[0]') as double) as prob FROM ${t1})リファレンス
学習済みモデルを用いたオフライン推論を実行するには、XGBoost Predict コンポーネントを使用します。構成の詳細については、「XGBoost Predict」をご参照ください。
Machine Learning Designer では、幅広いプリセットアルゴリズムコンポーネントが提供されています。全リストについては、「コンポーネントリファレンス:全コンポーネントの概要」をご参照ください。