パラメータサーバ (PS) は、多数のオフラインおよびオンラインのトレーニングジョブを処理するために使用される。 スケーラブル多重加法回帰木 (SMART) は、PSベースの勾配ブースティング決定木 (GBDT) を使用することによって実装される反復アルゴリズムです。 Platform for AI (PAI) のPS-SMARTマルチクラス分類コンポーネントは、数百億のサンプルと数十万の機能のトレーニングジョブをサポートします。 コンポーネントは、数千のノードでトレーニングジョブを実行できます。 このコンポーネントは、ヒストグラムを使用した近似など、複数のデータ形式と最適化技術もサポートしています。
制限事項
PS-SMARTマルチクラス分類コンポーネントの入力データは、次の要件を満たす必要があります。
宛先列のデータは数値データ型である必要があります。 MaxComputeテーブルのデータ型がSTRINGの場合、データを数値データ型に変換する必要があります。 たとえば、分類オブジェクトがGood/Medium/Badなどの文字列の場合、文字列を0/1/2に変換する必要があります。
データがキー値形式の場合、フィーチャ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: PAIコンソールでコンポーネントを設定する
Machine Learning Designerのパイプラインページでコンポーネントを設定します。 下表に、各パラメーターを説明します。
タブ | パラメーター | 説明 |
フィールド設定 | スパース形式の使用 | 入力データがスパース形式かどうかを指定します。 入力データがkey-value形式のスパースデータの場合は、key-valueペアをスペースで区切り、keyとvaluesをコロン (:) で区切ります。 例: 1:0.3 3:0.9 |
フィーチャー列 | 入力テーブルからトレーニング用のフィーチャ列を選択します。 入力テーブルのデータがdense形式の場合、BIGINT型とDOUBLE型の列のみがサポートされます。 入力テーブルのデータがスパース形式のキーと値のペアであり、keysとvaluesが数値データ型の場合、STRING型の列のみがサポートされます。 | |
ラベル列 | 入力テーブルのラベル列。 STRINGデータ型と数値データ型の列がサポートされています。 ただし、列には数値データ型のデータしか格納できません。 例えば、列値は、バイナリ分類において0または1であり得る。 | |
重量コラム | サンプルの各行の重みを含む列を選択します。 数値データ型の列がサポートされています。 | |
パラメーター設定 | クラス | マルチクラス分類のクラス数。 パラメーターをnに設定すると、label列の値は {0,1,2,...,n-1} になります。 |
評価インジケータタイプ | このパラメーターは、[Multiclass Negative Log Likelihood] または [Multiclass Classification Error] に設定できます。 | |
木 | 木の数。 値は正の整数でなければなりません。 Treesの値は、トレーニング期間に比例します。 | |
最大決定ツリーの深さ | デフォルト値は5で、最大32個のリーフノードを設定できることを示します。 | |
データサンプリング比 | ツリーが構築されたときのデータサンプリング率。 サンプルデータは、トレーニングを高速化する弱学習器を構築するために使用されます。 | |
特徴サンプリング分数 | ツリーが構築されたときの特徴サンプリング比。 サンプルフィーチャを使用して、トレーニングを高速化する弱学習器を構築します。 | |
L1ペナルティ係数 | リーフノードのサイズ。 値が大きいほど、リーフノードの分布がより均一であることを示す。 オーバーフィットが発生した場合は、パラメーター値を増やします。 | |
L2ペナルティ係数 | リーフノードのサイズ。 値が大きいほど、リーフノードの分布がより均一であることを示す。 オーバーフィットが発生した場合は、パラメーター値を増やします。 | |
学習率 | 学習率を入力します。 有効値: (0,1) | |
スケッチベースの近似精度 | スケッチを作成するときに分位数を選択するためのしきい値を入力します。 値が小さいほど、より多くのビンが得られることを示す。 ほとんどの場合、デフォルト値. 03が使用されます。 | |
最小スプリット損失変更 | ノードの分割に必要な最小損失変更を入力します。 値が大きいほど、ノード分割の確率が低いことを示す。 | |
機能 | フィーチャー数または最大フィーチャーIDを入力します。 リソース使用量を評価する場合は、このパラメーターを設定します。 | |
グローバルオフセット | すべてのサンプルの初期予測値を入力します。 | |
ランダムシード | ランダムシードを入力します。 このパラメーターの値は整数でなければなりません。 | |
機能重要性タイプ | フィーチャーのタイプ。 有効な値: Weight、Gain、Cover 重みは、特徴の分割数を示す。 利得は、特徴によって提供される情報利得を示す。 Coverは、分割ノード上のフィーチャによってカバーされるサンプルの数を示します。 | |
チューニング | コア | コアの数。 デフォルトでは、システムが値を決定します。 |
コアあたりのメモリサイズ (MB) | 各コアのメモリサイズ。 単位:MB。 ほとんどの場合、システムはメモリサイズを決定します。 |
方法2: PAIコマンドを使用してコンポーネントを構成する
PAIコマンドで使用されるパラメーターを次の表に示します。 SQLスクリプトコンポーネントを使用してPAIコマンドを呼び出すことができます。 詳細については、「SQLスクリプト」をご参照ください。
# Training
PAI -name ps_smart
-project algo_public
-DinputTableName="smart_multiclass_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="multi:softprob"
-Dmetric="mlogloss"
-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_multiclass_input";
-DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
-DoutputTableName="pai_temp_24515_545860_1"
-DfeatureColNames="features"
-DappendColNames="label,features"
-DenableSparse="true"
-DkvDelimiter=":"
-Dlifecycle="28"
モジュール | パラメーター | 必須 | 説明 | デフォルト値 |
データパラメーター | featureColNames | 可 | トレーニング用に入力テーブルから選択されたフィーチャ列。 入力テーブルのデータがdense形式の場合、BIGINT型とDOUBLE型の列のみがサポートされます。 入力テーブルのデータがkey-value形式のスパースデータで、keysとvaluesが数値データ型の場合、STRINGデータ型の列のみがサポートされます。 | N/A |
labelColName | 可 | 入力テーブルのラベル列。 STRING型の列と数値データ型がサポートされています。 ただし、列には数値データ型のデータしか格納できません。 たとえば、列値は、マルチクラス分類では {0,1、2、… 、n-1} になります。 nはクラスの数を示します。 | N/A | |
weightCol | 不可 | サンプルの各行の重みを含む列を選択します。 数値データ型の列がサポートされています。 | N/A | |
enableSparse | 不可 | 入力データがスパース形式かどうかを指定します。 有効な値: trueとfalse。 入力データがkey-value形式のスパースデータの場合は、key-valueペアをスペースで区切り、keyとvaluesをコロン (:) で区切ります。 例: 1:0.3 3:0.9 | false | |
inputTableName | 可 | 入力テーブルの名前。 | N/A | |
modelName | 可 | 出力モデルの名前。 | N/A | |
outputImportanceTableName | 不可 | フィーチャの重要度を含むテーブルの名前。 | N/A | |
inputTablePartitions | 不可 | トレーニング用に入力テーブルから選択されたパーティション。 形式: ds=1/pt=1 | N/A | |
outputTableName | 不可 | 生成されるMaxComputeテーブル。 このテーブルは、読み取ることができないバイナリファイルであり、PS-SMART予測コンポーネントを使用してのみ取得できます。 | N/A | |
ライフサイクル | 不可 | 出力テーブルのライフサイクル。 | 3 | |
アルゴリズムのパラメーター | classNum | 可 | マルチクラス分類のクラス数。 このパラメーターをnに設定すると、label列の値は {0,1,2,...,n-1} になります。 | N/A |
客観的 | 可 | 目的関数の型。 トレーニングにマルチクラス分類を使用する場合は、multi:softprob目的関数を指定します。 | N/A | |
metric | 不可 | トレーニングセットの評価メトリックタイプ。logviewのコーディネーターのstdoutで指定されています。 有効な値:
| N/A | |
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。 リソース使用量を評価する場合は、このパラメーターを設定します。 | N/A | |
baseScore | 不可 | すべてのサンプルの初期予測値。 | 0.5 | |
randSeed | 不可 | ランダムシード。 このパラメーターの値は整数でなければなりません。 | N/A | |
featureImportanceType | 不可 | フィーチャの重要度のタイプ。 有効な値:
| ゲイン | |
チューニングパラメータ | coreNum | 不可 | コンピューティングで使用されるコアの数。 コンピューティングアルゴリズムの速度は、このパラメータの値とともに増加します。 | 自動割り当て |
memSizePerCore | 不可 | 各コアのメモリサイズ。 単位:MB。 | 自動割り当て |
例
ODPS SQLノードを使用してsmart_multiclass_inputという名前のテーブルを作成します。 詳細については、「MaxCompute SQLタスクの開発」をご参照ください。 この例では、key − value形式の入力データが生成される。
drop table if exists smart_multiclass_input; create table smart_multiclass_input lifecycle 3 as select * from ( select '2' as label, '1:0.55 2:-0.15 3:0.82 4:-0.99 5:0.17' as features union all select '1' as label, '1:-1.26 2:1.36 3:-0.13 4:-2.82 5:-0.41' as features union all select '1' as label, '1:-0.77 2:0.91 3:-0.23 4:-4.46 5:0.91' as features union all select '2' as label, '1:0.86 2:-0.22 3:-0.46 4:0.08 5:-0.60' as features union all select '1' as label, '1:-0.76 2:0.89 3:1.02 4:-0.78 5:-0.86' as features union all select '1' as label, '1:2.22 2:-0.46 3:0.49 4:0.31 5:-1.84' as features union all select '0' as label, '1:-1.21 2:0.09 3:0.23 4:2.04 5:0.30' as features union all select '1' as label, '1:2.17 2:-0.45 3:-1.22 4:-0.48 5:-1.41' as features union all select '0' as label, '1:-0.40 2:0.63 3:0.56 4:0.74 5:-1.44' as features union all select '1' as label, '1:0.17 2:0.49 3:-1.50 4:-2.20 5:-0.35' as features ) tmp;
生成されたデータを次の図に示します。
次の図に示すように、パイプラインを作成します。 詳細については、「モデルの生成」をご参照ください。
コンポーネントパラメーターを設定します。
キャンバス上の [Read Table -1] コンポーネントをクリックします。 右側の [テーブルの選択] タブで、[テーブル名] パラメーターをsmart_multiclass_inputに設定します。
PS-SMARTマルチクラス分類コンポーネントのパラメーターを設定します。 下表に、各パラメーターを説明します。 テーブルに含まれていないパラメーターのデフォルト値を使用します。
タブ
パラメーター
説明
フィールド設定
フィーチャー列
[features] 列を選択します。
ラベル列
label列を選択します。
スパース形式の使用
[スパース形式の使用] を選択します。
パラメーター設定
クラス
パラメーターを3に設定します。
評価インジケータタイプ
ドロップダウンリストから [Multiclass Negative Log Likelihood] を選択します。
木
パラメーターを5に設定します。
Prediction-1コンポーネントのパラメーターを設定します。 下表に、各パラメーターを説明します。 テーブルに含まれていないパラメーターのデフォルト値を使用します。
タブ
パラメーター
説明
フィールド設定
フィーチャー列
[features] 列を選択します。
予約済み列
ラベル列と機能列を選択します。
スパース行列
[スパースマトリックス] を選択します。
KVデリミタ
パラメーターをコロン (:) に設定します。
KVペア区切り文字
フィールドを空のままにすると、スペースが区切り文字として使用されます。
キャンバスで [テーブル1の書き込み] コンポーネントをクリックします。 右側の [テーブルの選択] タブで、[テーブル名] パラメーターをsmart_multiclass_outputに設定します。
キャンバス上のアイコンをクリックしてパイプラインを実行します。
パイプラインの実行後、[予測-1] コンポーネントを右クリックし、
を選択して予測結果を表示します。 パラメータ:prediction_detail: マルチクラス分類に使用されるクラス。 有効な値: 0、1、2
prediction_result: 予測結果のクラス。
prediction_score: prediction_result列のクラスの確率。
キャンバスで、[PS-SMARTマルチクラス分類] コンポーネントを右クリックし、
を選択して、機能の重要性の結果を表示します。パラメータ:
id: 渡されたフィーチャのID。 この例では、入力データはkey-value形式です。 id列の値は、キーと値のペアのキーを示します。
value: フィーチャの重要度のタイプ。 デフォルト値はgainで、モデルのフィーチャによって提供される情報ゲインの合計を示します。
PS-SMARTモデルの展開
PS-SMARTバイナリ分類トレーニングコンポーネントによって生成されたモデルをオンラインサービスとしてEASにデプロイする場合は、PS-SMARTバイナリ分類トレーニングコンポーネントの下流ノードとしてモデルエクスポートコンポーネントを追加し、モデルエクスポートコンポーネントを構成する必要があります。 詳細については、「モデルのエクスポート」をご参照ください。
モデルエクスポートコンポーネントが正常に実行された後、EAS-online Model Servicesページで、生成されたモデルをオンラインサービスとしてEASにデプロイできます。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。