パラメータサーバ (PS) は、多数のオフラインおよびオンラインのトレーニングタスクを処理するために使用される。 SMARTは、スケーラブルな重加法回帰木の略です。 PS-SMARTは、PSベースの勾配ブースティング決定木 (GBDT) を使用することによって実装される反復アルゴリズムである。 PS-SMARTバイナリ分類トレーニングコンポーネントは、数百億のサンプルと数十万の機能のトレーニングタスクをサポートします。 何千ものノードでトレーニングタスクを実行できます。 このコンポーネントは、複数のデータ形式と、ヒストグラムベースの近似などの最適化技術もサポートしています。
制限事項
PS-SMART回帰コンポーネントの入力データは、次の要件を満たす必要があります。
PS-SMART回帰コンポーネントで使用できるのは、数値データ型の列のみです。 MaxComputeテーブルのデータ型がSTRINGの場合、まずデータ型を変換する必要があります。
データがkey-value形式の場合、フィーチャIDは正の整数で、フィーチャ値は実数でなければなりません。 フィーチャIDのデータ型がSTRINGの場合、シリアル化コンポーネントを使用してデータをシリアル化する必要があります。 フィーチャ値がカテゴリ文字列の場合、フィーチャ離散化などのフィーチャエンジニアリングを実行して値を処理する必要があります。
PS-SMART回帰コンポーネントは、数十万の機能タスクをサポートできます。 しかし、これらのタスクはリソース集約的であり、時間がかかる。 この問題を解決するには、GBDTアルゴリズムを使用してモデルをトレーニングします。 GBDTアルゴリズムは、連続フィーチャがトレーニングに使用されるシナリオに適しています。 カテゴリフィーチャに対してワンホットなエンコードを実行して、低頻度のフィーチャをフィルタリングできます。 しかし, ここでは, 数値データ型の連続な特性を実行しないよう推奨する.
PS-SMARTアルゴリズムは、ランダム性を導入し得る。 例えば、ランダム性は、data_sample_ratioおよびfee_sample_ratioに基づくデータおよび特徴サンプリング、近似のためのヒストグラムを使用することによるPS-SMARTアルゴリズムの最適化、およびローカルスケッチのグローバルスケッチへのマージのシナリオに導入され得る。 ジョブが分散モードで複数のワーカーで実行される場合、ツリーの構造は異なります。 ただし、モデルのトレーニング効果は理論的には同じです。 トレーニング中に同じデータとパラメーターを使用するが、異なる結果が得られる場合は正常です。
トレーニングを高速化する場合は、Coresパラメーターをより大きな値に設定できます。 PS-SMARTアルゴリズムは、必要なリソースが提供された後にトレーニングタスクを開始します。 したがって、より多くのリソースが要求されるほど、より長く待つ必要があります。
注意事項
PS-SMART回帰コンポーネントを使用する場合は、次の項目に注意する必要があります。
PS-SMART回帰コンポーネントは、数十万の機能タスクをサポートできます。 しかし、これらのタスクはリソース集約的であり、時間がかかる。 この問題を解決するには、GBDTアルゴリズムを使用してモデルをトレーニングします。 GBDTアルゴリズムは、連続フィーチャがトレーニングに使用されるシナリオに適しています。 カテゴリフィーチャに対してワンホットなエンコードを実行して、低頻度のフィーチャをフィルタリングできます。 しかし, ここでは, 数値データ型の連続な特性を実行しないよう推奨する.
PS-SMARTアルゴリズムは、ランダム性を導入し得る。 例えば、ランダム性は、data_sample_ratioおよびfee_sample_ratioに基づくデータおよび特徴サンプリング、近似のためのヒストグラムを使用することによるPS-SMARTアルゴリズムの最適化、およびローカルスケッチのグローバルスケッチへのマージのシナリオに導入され得る。 ジョブが分散モードで複数のワーカーで実行される場合、ツリーの構造は異なります。 ただし、モデルのトレーニング効果は理論的には同じです。 トレーニング中に同じデータとパラメーターを使用するが、異なる結果が得られる場合は正常です。
トレーニングを高速化する場合は、Coresパラメーターをより大きな値に設定できます。 PS-SMARTアルゴリズムは、必要なリソースが提供された後にトレーニングタスクを開始します。 したがって、より多くのリソースが要求されるほど、より長く待つ必要があります。
コンポーネントの設定
次のいずれかの方法を使用して、PS-SMART回帰コンポーネントを設定できます。
方法1: Platform for AI (PAI) コンソールでコンポーネントを構成する
Machine Learning Designerでコンポーネントパラメーターを設定します。 下表に、各パラメーターを説明します。
タブ | パラメーター | 説明 |
フィールド設定 | スパース形式の使用 | 入力データがスパース形式かどうかを指定します。 スパース形式のデータがキーと値のペアを使用して表示される場合は、キーと値のペアをスペースで区切り、キーと値をコロン (:) で区切ります。 例: 1:0.3 3:0.9 |
フィーチャー列 | 入力テーブルからトレーニング用のフィーチャ列を選択します。 入力テーブルのデータがdense形式の場合、BIGINT型とDOUBLE型の列のみがサポートされます。 入力テーブルのデータがキーと値のペアを使用して表示されるスパース形式であり、keysとvaluesが数値データ型の場合、STRING型の列のみがサポートされます。 | |
ラベル列 | 入力テーブルからラベル列を選択します。 STRING型の列と数値データ型がサポートされています。 ただし、列には数値データ型のデータしか格納できません。 例えば、列値は、バイナリ分類で0または1することができる。 | |
重量コラム | サンプルの各行の重みを含む列を選択します。 数値データ型の列がサポートされています。 | |
パラメーター設定 | 目的関数タイプ | 有効な値:
|
Tweedie分布指数 | Tweedie分布の分散と平均値との関係の指数。 このパラメーターは、目的関数型パラメーターをTweedie Regressionに設定した場合にのみサポートされます。 | |
評価インジケータタイプ | 有効な値:
| |
木 | ツリーの数を入力します。 このパラメーターの値は整数でなければなりません。 ツリー数は、トレーニング時間の量に比例する。 | |
最大ツリー深さ | デフォルト値は5で、最大32個のリーフノードを設定できることを指定します。 | |
データサンプリング分画 | ツリー構築時のデータサンプリング比を入力します。 サンプルデータは、トレーニングを高速化する弱学習器を構築するために使用されます。 | |
特徴サンプリング分数 | ツリーが構築されるときのフィーチャサンプリング比を入力します。 サンプルフィーチャを使用して、トレーニングを高速化する弱学習器を構築します。 | |
L1ペナルティ係数 | リーフノードのサイズを制御します。 より大きな値は、リーフノードのより均一な分布をもたらす。 オーバーフィットが発生した場合は、パラメーター値を増やします。 | |
L2ペナルティ係数 | リーフノードのサイズを制御します。 より大きな値は、リーフノードのより均一な分布をもたらす。 オーバーフィットが発生した場合は、パラメーター値を増やします。 | |
学習率 | 学習率を入力します。 有効値: (0,1) | |
スケッチベースの近似精度 | スケッチを作成するときに分位数を選択するためのしきい値を入力します。 値が小さいほど、より多くのビンを得ることができる。 ほとんどの場合、デフォルト値. 03が使用されます。 | |
最小スプリット損失変更 | ノードの分割に必要な最小損失変更を入力します。 値が大きいほど、ノード分割が発生する可能性が低いことを指定します。 | |
機能 | フィーチャー数または最大フィーチャーIDを入力します。 このパラメーターがリソース使用量の見積もりに指定されていない場合、システムは自動的にSQLタスクを実行して、機能の数または最大機能IDを計算します。 | |
グローバルオフセット | すべてのサンプルの初期予測値を入力します。 | |
ランダムシード | ランダムシードを入力します。 このパラメーターの値は整数でなければなりません。 | |
機能重要性タイプ | 有効な値:
| |
チューニング | コア | コアの数を選択します。 デフォルトでは、システムが値を決定します。 |
コアあたりのメモリサイズ | 各コアのメモリサイズを選択します。 単位:MB。 ほとんどの場合、システムはメモリサイズを決定します。 |
方法2: PAIコマンドを使用してコンポーネントを構成する
PAIコマンドを使用してコンポーネントパラメータを設定します。 次のセクションでは、パラメーターについて説明します。 SQLスクリプトコンポーネントを使用してPAIコマンドを呼び出すことができます。 詳細については、「SQLスクリプト」をご参照ください。
# Training
PAI -name ps_smart
-project algo_public
-DinputTableName="smart_regression_input"
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545859_2"
-DoutputImportanceTableName="pai_temp_24515_545859_3"
-DlabelColName="label"
-DfeatureColNames="features"
-DenableSparse="true"
-Dobjective="reg:linear"
-Dmetric="rmse"
-DfeatureImportanceType="gain"
-DtreeCount="5"
-DmaxDepth="5"
-Dshrinkage="0.3"
-Dl2="1.0"
-Dl1="0"
-Dlifecycle="3"
-DsketchEps="0.03"
-DsampleRatio="1.0"
-DfeatureRatio="1.0"
-DbaseScore="0.5"
-DminSplitLoss="0"
# Prediction
PAI -name prediction
-project algo_public
-DinputTableName="smart_regression_input";
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545860_1"
-DfeatureColNames="features"
-DappendColNames="label,features"
-DenableSparse="true"
-Dlifecycle="28"
モジュール | パラメーター | 必須 | 説明 | デフォルト値 |
データパラメーター | featureColNames | 可 | トレーニング用に入力テーブルから選択されたフィーチャ列。 入力テーブルのデータがdense形式の場合、BIGINTおよびDOUBLEデータ型の列のみがサポートされます。 入力テーブルのデータがキーと値のペアを使用して表示されるスパース形式であり、keysとvaluesが数値データ型の場合、STRINGデータ型の列のみがサポートされます。 | デフォルト値なし |
labelColName | 可 | 入力テーブルのラベル列。 STRING型の列と数値データ型がサポートされています。 ただし、列には数値データ型のデータしか格納できません。 例えば、列値は、バイナリ分類で0または1することができる。 | デフォルト値なし | |
weightCol | 不可 | サンプルの各行の重みを含む列。 数値データ型の列がサポートされています。 | デフォルト値なし | |
enableSparse | 不可 | 入力データがスパース形式かどうかを指定します。 有効な値: trueとfalse。 入力データがスパース形式かどうかを指定します。 スパース形式のデータがキーと値のペアを使用して表示される場合は、キーと値のペアをスペースで区切り、キーと値をコロン (:) で区切ります。 例: 1:0.3 3:0.9 | false | |
inputTableName | 可 | 入力テーブルの名前。 | デフォルト値なし | |
modelName | 可 | 出力モデルの名前。 | デフォルト値なし | |
outputImportanceTableName | 不可 | 機能の重要性を提供するテーブルの名前。 | デフォルト値なし | |
inputTablePartitions | 不可 | トレーニング用に入力テーブルから選択されたパーティション。 形式: ds=1/pt=1 | デフォルト値なし | |
outputTableName | 不可 | MaxComputeにエクスポートされるテーブルの名前。 テーブル名はバイナリ形式でなければなりません。 | デフォルト値なし | |
ライフサイクル | 不可 | 出力テーブルのライフサイクル。 単位:日 | 3 | |
アルゴリズムのパラメーター | 客観的 | 可 | 目的関数の型。 有効な値:
| reg: リニア |
metric | 不可 | トレーニングセットの評価メトリックのタイプ。logviewのコーディネーターのstdoutに含まれています。 有効な値:
| デフォルト値なし | |
treeCount | 不可 | 木の数。 値はトレーニング時間に比例します。 | 1 | |
maxDepth | 不可 | ツリーの最大深さ。 有効な値: 1 ~ 20。 | 5 | |
sampleRatio | 不可 | データサンプリング比。 値の範囲: (0,1) このパラメーターが1.0に設定されている場合、サンプリングは実行されません。 | 1.0 | |
featureRatio | 不可 | 特徴サンプリング比。 値の範囲: (0,1) このパラメーターが1.0に設定されている場合、データはサンプリングされません。 | 1.0 | |
l1 | 不可 | L1ペナルティ係数。 このパラメータの値が大きいほど、リーフノードの分布がより均一になります。 オーバーフィットが発生した場合は、パラメーター値を増やします。 | 0 | |
l2 | 不可 | L2ペナルティ係数。 このパラメータの値が大きいほど、リーフノードの分布がより均一になります。 オーバーフィットが発生した場合は、パラメーター値を増やします。 | 1.0 | |
収缩 | 不可 | 学習率。 値の範囲: (0,1) | 0.3 | |
sketchEps | 不可 | スケッチを作成するときに分位数を選択するためのしきい値。 ビンの数はO(1.0/sketchEps) である。 値が小さいほど、より多くのビンを得ることができる。 ほとんどの場合、デフォルト値が使用されます。 値の範囲: (0,1) | 0.03 | |
minSplitLoss | 不可 | ノードの分割に必要な最小損失変更を入力します。 値が大きいほど、ノード分割が発生する可能性が低いことを指定します。 | 0 | |
featureNum | 不可 | フィーチャの数または最大フィーチャID。 このパラメーターがリソース使用量の見積もりに指定されていない場合、システムは自動的にSQLタスクを実行して、機能の数または最大機能IDを計算します。 | デフォルト値なし | |
baseScore | 不可 | すべてのサンプルの初期予測値。 | 0.5 | |
randSeed | 不可 | ランダムシード。 このパラメーターの値は整数でなければなりません。 | デフォルト値なし | |
featureImportanceType | 不可 | フィーチャの重要度タイプ。 有効な値:
| ゲイン | |
tweedieVarPower | 不可 | Tweedie分布の分散と平均値との関係の指数。 | 1.5 | |
チューニングパラメータ | coreNum | 不可 | コンピューティングアルゴリズムによって使用されるコアの数。 値が大きいほど、計算アルゴリズムの実行が速くなります。 | システムによって指定される |
memSizePerCore | 不可 | 各コアのメモリサイズ。 単位:MB。 | システムによって指定される |
例:
次のSQL文を実行して、ODPS SQLノードで入力データを生成します。 この例では、キー − 値ペアの入力データが生成される。
drop table if exists smart_regression_input; create table smart_regression_input as select * from ( select 2.0 as label, '1:0.55 2:-0.15 3:0.82 4:-0.99 5:0.17' as features union all select 1.0 as label, '1:-1.26 2:1.36 3:-0.13 4:-2.82 5:-0.41' as features union all select 1.0 as label, '1:-0.77 2:0.91 3:-0.23 4:-4.46 5:0.91' as features union all select 2.0 as label, '1:0.86 2:-0.22 3:-0.46 4:0.08 5:-0.60' as features union all select 1.0 as label, '1:-0.76 2:0.89 3:1.02 4:-0.78 5:-0.86' as features union all select 1.0 as label, '1:2.22 2:-0.46 3:0.49 4:0.31 5:-1.84' as features union all select 0.0 as label, '1:-1.21 2:0.09 3:0.23 4:2.04 5:0.30' as features union all select 1.0 as label, '1:2.17 2:-0.45 3:-1.22 4:-0.48 5:-1.41' as features union all select 0.0 as label, '1:-0.40 2:0.63 3:0.56 4:0.74 5:-1.44' as features union all select 1.0 as label, '1:0.17 2:0.49 3:-1.50 4:-2.20 5:-0.35' as features ) tmp;
生成されたトレーニングデータを次の図に示します。
次の図に示すパイプラインを作成し、コンポーネントを実行します。 詳細については、「アルゴリズムモデリング」をご参照ください。
Machine Learning Designerの左側のコンポーネントリストで、[Read Table] 、[Regression] 、[Prediction] 、[Write Table] の各コンポーネントを個別に検索し、右側のキャンバスにPS-SMARTします。
コンポーネントパラメーターを設定します。
キャンバスで、[Read Table-1] コンポーネントをクリックします。 右側のウィンドウの [テーブルの選択] タブで、[テーブル名] をsmart_regression_inputに設定します。
キャンバスで、PS-SMART回帰-1コンポーネントをクリックし、右側のウィンドウでパラメーターを設定します。 下表に、各パラメーターを説明します。 表に記載されていないパラメーターのデフォルト値を保持します。
タブ
パラメーター
説明
フィールド設定
スパース形式の使用
[スパース形式の使用] を選択します。
フィーチャー列
[features] 列を選択します。
ラベル列
label列を選択します。
パラメーター設定
目的関数タイプ
パラメーターを線形回帰に設定します。
評価インジケータタイプ
パラメーターを [根付き平均二乗誤差] に設定します。
木
パラメーターを5に設定します。
キャンバスで、[予測-1] コンポーネントをクリックし、パラメーターを設定します。 下表に、各パラメーターを説明します。 表に記載されていないパラメーターのデフォルト値を保持します。
タブ
パラメーター
説明
フィールド設定
フィーチャー列
デフォルトでは、入力テーブルのすべての列が選択されます。 特定の列をトレーニングに使用することはできません。 これらの列は予測結果に影響を与えません。
予約済み列
label列を選択します。
スパース行列
[スパースマトリックス] を選択します。
KVデリミタ
このパラメーターをコロン (:) に設定します。
KVペア区切り文字
このパラメーターをスペースに設定します。
キャンバスで、Write Table-1コンポーネントをクリックします。 右側のウィンドウの [テーブルの選択] タブで、[新しいテーブル名] をsmart_regression_outputに設定します。
パラメーターの設定が完了したら、ボタンをクリックしてパイプラインを実行します。
[予測-1] コンポーネントを右クリックし、
を選択して予測結果を表示します。[PS-SMART回帰-1] コンポーネントを右クリックし、
を選択してフィーチャ重要度テーブルを表示します。id: 渡されたフィーチャのID。 この例では、入力データはkey-value形式です。 id列の値は、キーと値のペアのキーを示します。 特徴重要度テーブルは、2つの特徴のみを有する。 これは、これら2つの特徴のみがツリーの分割で使用されることを示す。 他の特徴の特徴重要度は0と考えることができる。 value: フィーチャの重要度タイプ。 このパラメーターのデフォルト値はgainです。これは、モデルのフィーチャによって提供される情報ゲインの合計を示します。
PS-SMARTモデルの展開
PS-SMARTバイナリ分類トレーニングコンポーネントによって生成されたモデルをオンラインサービスとしてEASにデプロイする場合は、PS-SMARTバイナリ分類トレーニングコンポーネントの下流ノードとしてモデルエクスポートコンポーネントを追加し、モデルエクスポートコンポーネントを構成する必要があります。 詳細については、「モデルのエクスポート」をご参照ください。
モデルエクスポートコンポーネントが正常に実行された後、EAS-online Model Servicesページで、生成されたモデルをオンラインサービスとしてEASにデプロイできます。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。
関連ドキュメント
Machine Learning Designerの詳細については、「Machine Learning Designerの概要」をご参照ください。
Machine Learning Designerは、さまざまなプリセットアルゴリズムコンポーネントを提供します。 コンポーネントを使用して、ビジネス要件に基づいてデータを処理できます。 詳細については、「コンポーネントリファレンス: すべてのコンポーネントの概要」をご参照ください。