すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:PS-SMARTバイナリ分类トレーニング

最終更新日:Jul 22, 2024

パラメータサーバ (PS) は、多数のオフラインおよびオンラインのトレーニングタスクを処理するために使用される。 SMARTは、スケーラブルな重加法回帰木の略です。 PS-SMARTは、PSベースの勾配ブースティング決定木 (GBDT) を使用することによって実装される反復アルゴリズムである。 PS-SMARTバイナリ分類トレーニングコンポーネントは、数百億のサンプルと数十万の機能のトレーニングタスクをサポートします。 何千ものノードでトレーニングタスクを実行できます。 このコンポーネントは、複数のデータ形式と、ヒストグラムベースの近似などの最適化技術もサポートしています。

制限事項

このコンポーネントは、MaxComputeのコンピューティングリソースのみに基づいて使用できます。

使用上の注意

  • PS-SMARTバイナリ分類トレーニングコンポーネントで使用できるのは、数値データ型の列のみです。 0は負の例を示し、1は正の例を示す。 MaxComputeテーブルのデータ型がSTRINGの場合、まずデータ型を変換する必要があります。 たとえば、Good/Bad1/0に変換する必要があります。

  • データがkey-value形式の場合、フィーチャIDは正の整数で、フィーチャ値は実数でなければなりません。 フィーチャIDのデータ型がSTRINGの場合、シリアル化コンポーネントを使用してデータをシリアル化する必要があります。 フィーチャ値がカテゴリ文字列の場合、フィーチャ離散化などのフィーチャエンジニアリングを実行して値を処理する必要があります。

  • PS-SMARTバイナリ分類トレーニングコンポーネントは、数十万の機能タスクをサポートします。 しかし、これらのタスクはリソース集約的であり、時間がかかる。 この問題を解決するには、GBDTアルゴリズムを使用してモデルをトレーニングします。 GBDT アルゴリズムは, 連続的な機能が訓練用に使用するシナリオに適している. カテゴリフィーチャに対してワンホットなエンコーディングを実行して、低頻度のフィーチャを除外できます。 しかし, ここでは, 数値データ型の連続な特性を実行しないよう推奨する.

  • PS-SMARTアルゴリズムは、ランダム性を導入し得る。 例えば、ランダム性は、data_sample_ratioおよびfee_sample_ratioに基づくデータおよび特徴サンプリング、近似のためのヒストグラムを使用することによるPS-SMARTアルゴリズムの最適化、およびローカルスケッチのグローバルスケッチへのマージのシナリオに導入され得る。 タスクが分散モードで複数のワーカーで実行される場合、ツリーの構造は異なります。 ただし、モデルのトレーニング効果は理論的には同じです。 トレーニング中に同じデータとパラメーターを使用するが、異なる結果が得られる場合は正常です。

  • トレーニングを高速化する場合は、Coresパラメーターをより大きな値に設定できます。 PS-SMARTアルゴリズムは、必要なリソースが提供された後にトレーニングタスクを開始します。 したがって、より多くのリソースが要求されるほど、より長く待つ必要があります。

コンポーネントの設定

次のいずれかの方法を使用して、コンポーネントを設定できます。

方法1: コンソールを使用する

Machine Learning Designerでコンポーネントパラメーターを設定します。 下表に、各パラメーターを説明します。

タブ

パラメーター

説明

フィールド設定

スパース形式の使用

入力データがスパースかどうかを指定します。 入力データがkey-value形式のスパースデータの場合は、key-valueペアをスペースで区切り、keyvaluesをコロン (:) で区切ります。 例: 1:0.3 3:0.9

フィーチャー列

入力テーブルからトレーニング用のフィーチャ列を選択します。 入力テーブルのデータが密集している場合、BIGINT型とDOUBLE型の列のみがサポートされます。 入力テーブルのデータがスパースキーと値のペアで、キーが数値データ型の場合、STRING型の列のみがサポートされます。

ラベル列

入力テーブルからラベル列を選択します。 STRING型の列と数値データ型がサポートされています。 列に含まれるデータは、バイナリ分類で使用される01などの数値型である必要があります。

重量コラム

サンプルの各行の重みを含む列を選択します。 数値データ型の列がサポートされています。

パラメーター設定

評価インジケータタイプ

トレーニングセットの評価メトリックタイプを選択します。 有効な値:

  • negative loglikelihood for logistic regression

  • バイナリ分類エラー

  • エリアアンダーカーブ用分类

ツリーの数を入力します。 このパラメーターの値は整数でなければなりません。 ツリー数は、トレーニング時間の量に比例する。

最大ツリー深さ

ツリーの最大深さを入力します。 デフォルト値は5で、最大16個のリーフノードを設定できることを示します。 このパラメーターの値は正の整数でなければなりません。

データサンプリング分画

ツリー構築時のデータサンプリング比を入力します。 サンプルデータは、トレーニングを高速化する弱学習器を構築するために使用されます。

特徴サンプリング分数

ツリーが構築されるときのフィーチャサンプリング比を入力します。 サンプルフィーチャを使用して、トレーニングを高速化する弱学習器を構築します。

L1ペナルティ係数

リーフノードのサイズを制御します。 より大きな値は、リーフノードのより均一な分布をもたらす。 オーバーフィットが発生した場合は、パラメーター値を増やします。

L2ペナルティ係数

リーフノードのサイズを制御します。 より大きな値は、リーフノードのより均一な分布をもたらす。 オーバーフィットが発生した場合は、パラメーター値を増やします。

学習率

学習率を入力します。 有効値: (0,1)

スケッチベースの近似精度

スケッチを作成するときに分位数を選択するためのしきい値を入力します。 値が小さいほど、より多くのビンを得ることができる。 ほとんどの場合、デフォルト値. 03が使用されます。

最小スプリット損失変更

ノードの分割に必要な最小損失変更を入力します。 値が大きいほど、ノード分割が発生する可能性が低いことを指定します。

機能

フィーチャー数または最大フィーチャーIDを入力します。 このパラメーターがリソース使用量の見積もりに指定されていない場合、システムは自動的にSQLタスクを実行して、機能の数または最大機能IDを計算します。

グローバルオフセット

すべてのサンプルの初期予測値を入力します。

ランダムシード

ランダムシードを入力します。 このパラメーターの値は整数でなければなりません。

機能重要性タイプ

フィーチャの重要度タイプを選択します。 有効な値:

  • Weight: フィーチャーの分割数を示します。

  • ゲイン: フィーチャによって提供される情報ゲインを示します。 デフォルト値です。

  • Cover: 分割ノードのフィーチャーでカバーされるサンプル数を示します。

チューニング

コア

コアの数を選択します。 デフォルトでは、システムが値を決定します。

コアあたりのメモリサイズ

各コアのメモリサイズを選択します。 単位:MB。 ほとんどの場合、システムはメモリサイズを決定します。

方法2: PAIコマンドを使用する

Platform for AI (PAI) コマンドを使用してコンポーネントパラメータを設定します。 次のセクションでは、パラメーターについて説明します。 SQLスクリプトコンポーネントを使用してPAIコマンドを呼び出すことができます。 詳細については、「SQLスクリプト」をご参照ください。

# Training 
PAI -name ps_smart
    -project algo_public
    -DinputTableName="smart_binary_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="f0,f1,f2,f3,f4,f5"
    -DenableSparse="false"
    -Dobjective="binary:logistic"
    -Dmetric="error"
    -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_binary_input"
    -DmodelName="xlab_m_pai_ps_smart_bi_545859_v0"
    -DoutputTableName="pai_temp_24515_545860_1"
    -DfeatureColNames="f0,f1,f2,f3,f4,f5"
    -DappendColNames="label,qid,f0,f1,f2,f3,f4,f5"
    -DenableSparse="false"
    -Dlifecycle="28";

モジュール

パラメーター

必須

説明

デフォルト値

データパラメーター

featureColNames

トレーニング用に入力テーブルから選択されたフィーチャ列。 入力テーブルのデータが密集している場合、BIGINT型とDOUBLE型の列のみがサポートされます。 入力テーブルのデータがkey-value形式のスパースデータで、keysvaluesが数値データ型の場合、STRINGデータ型の列のみがサポートされます。

None

labelColName

入力テーブルのラベル列。 STRING型の列と数値データ型がサポートされています。 ただし、列には数値データ型のデータしか格納できません。 例えば、列値は、バイナリ分類で0または1することができる。

None

weightCol

不可

サンプルの各行の重みを含む列。 数値データ型の列がサポートされています。

None

enableSparse

不可

入力データがスパースかどうかを指定します。 有効な値: trueとfalse。 入力データがkey-value形式のスパースデータの場合は、key-valueペアをスペースで区切り、keyvaluesをコロン (:) で区切ります。 例: 1:0.3 3:0.9

false

inputTableName

入力テーブルの名前。

None

modelName

出力モデルの名前。

None

outputImportanceTableName

不可

機能の重要性を提供するテーブルの名前。

None

inputTablePartitions

不可

トレーニング用に入力テーブルから選択されたパーティション。 形式: ds=1/pt=1

None

outputTableName

不可

生成されるMaxComputeテーブル。 テーブルはバイナリファイルです。 それは読むことができず、PS-SMART予測コンポーネントを使用することによってのみ得ることができる。

None

ライフサイクル

不可

出力テーブルのライフサイクル。 単位:日

3

アルゴリズムのパラメーター

客観的

目的関数の型。 バイナリ分類コンポーネントを使用してトレーニングを実行する場合は、パラメーターをbinary:logisticに設定します。

None

metric

不可

トレーニングセットの評価メトリックタイプ。LogViewのコーディネーターのstdoutに含まれています。 有効な値:

  • logloss: PAIコンソールの [評価指標タイプ] パラメーターの [ロジスティック回帰の負の対数尤度] 値に対応します。

  • error: PAIコンソールの [評価インジケータタイプ] パラメーターの [バイナリ分類エラー] 値に対応します。

  • auc: PAIコンソールの [評価インジケータタイプ] パラメーターの [分類のAUC] 値に対応します。

None

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を計算します。

None

baseScore

不可

すべてのサンプルの初期予測値。

0.5

randSeed

不可

ランダムシード。 このパラメーターの値は整数でなければなりません。

None

featureImportanceType

不可

フィーチャの重要度タイプ。 有効な値:

  • weight: フィーチャーの分割数を示します。

  • gain: 機能によって提供される情報ゲインを示します。

  • cover: 分割ノードのフィーチャーでカバーされるサンプル数を示します。

ゲイン

チューニングパラメータ

coreNum

不可

コンピューティングで使用されるコアの数。 値が大きいほど、計算アルゴリズムの実行が速いことを示す。

自動割り当て

memSizePerCore

不可

各コアのメモリサイズ。 単位:MB。

自動割り当て

例:

  1. ODPS SQLノードで次のSQL文を実行して、トレーニングデータを生成します。 この例では、高密度トレーニングデータが生成される。

    drop table if exists smart_binary_input;
    create table smart_binary_input lifecycle 3 as
    select
    *
    from
    (
    select 0.72 as f0, 0.42 as f1, 0.55 as f2, -0.09 as f3, 1.79 as f4, -1.2 as f5, 0 as label
    union all
    select 1.23 as f0, -0.33 as f1, -1.55 as f2, 0.92 as f3, -0.04 as f4, -0.1 as f5, 1 as label
    union all
    select -0.2 as f0, -0.55 as f1, -1.28 as f2, 0.48 as f3, -1.7 as f4, 1.13 as f5, 1 as label
    union all
    select 1.24 as f0, -0.68 as f1, 1.82 as f2, 1.57 as f3, 1.18 as f4, 0.2 as f5, 0 as label
    union all
    select -0.85 as f0, 0.19 as f1, -0.06 as f2, -0.55 as f3, 0.31 as f4, 0.08 as f5, 1 as label
    union all
    select 0.58 as f0, -1.39 as f1, 0.05 as f2, 2.18 as f3, -0.02 as f4, 1.71 as f5, 0 as label
    union all
    select -0.48 as f0, 0.79 as f1, 2.52 as f2, -1.19 as f3, 0.9 as f4, -1.04 as f5, 1 as label
    union all
    select 1.02 as f0, -0.88 as f1, 0.82 as f2, 1.82 as f3, 1.55 as f4, 0.53 as f5, 0 as label
    union all
    select 1.19 as f0, -1.18 as f1, -1.1 as f2, 2.26 as f3, 1.22 as f4, 0.92 as f5, 0 as label
    union all
    select -2.78 as f0, 2.33 as f1, 1.18 as f2, -4.5 as f3, -1.31 as f4, -1.8 as f5, 1 as label
    ) tmp;

    生成されたトレーニングデータを次の図に示します。image

  2. 次の図に示すパイプラインを作成し、コンポーネントを実行します。 詳細については、「アルゴリズムモデリング」をご参照ください。image

    1. Machine Learning Designerの左側のコンポーネントリストで、[Read Table] 、[Binary Classification Training] 、[Prediction] 、[Write Table] コンポーネントをPS-SMARTして、コンポーネントを右側のキャンバスにドラッグします。

    2. ラインを描画してノードを接続し、前の図に基づいてアップストリームとダウンストリームの関係を含むパイプラインにノードを編成します。

    3. コンポーネントパラメーターを設定します。

      • キャンバスで、[Read Table-1] コンポーネントをクリックします。 右側のウィンドウの [テーブルの選択] タブで、[テーブル名] をsmart_binary_inputに設定します。

      • キャンバスで、PS-SMARTバイナリ分類トレーニング-1コンポーネントをクリックし、右ペインの次の表に示すパラメーターを設定します。 表にリストされていないパラメーターのデフォルト値を保持します。

        タブ

        パラメーター

        説明

        フィールド設定

        フィーチャー列

        フィーチャー列を選択します。 f0f1f2f3f4f5列を選択します。

        ラベル列

        label列を選択します。

        パラメーター設定

        評価インジケータタイプ

        評価メトリックタイプを選択します。 パラメーターを [分類のAUC] に設定します。

        このパラメーターを5に設定します。

      • キャンバスで、[予測-1] コンポーネントをクリックします。 右側のウィンドウの [フィールド設定] タブで、[すべて選択] [予約列] を選択します。 残りのパラメーターのデフォルト値を保持します。

      • キャンバスで、Write Table-1コンポーネントをクリックします。 右側のウィンドウの [テーブルの選択] タブで、[新しいテーブル名] をsmart_binary_outputに設定します。

    4. パラメーターの設定が完了したら、ボタンをクリックしimageてパイプラインを実行します。

  3. [予測-1] コンポーネントを右クリックし、[データの表示] > [予測結果出力ポート] を選択して予測結果を表示します。 prediction_detailの列のimage1は正の例を示し、0は負の例を示します。

  4. [PS-SMARTバイナリ分類トレーニング-1] コンポーネントを右クリックし、[データの表示] > [出力機能重要度テーブル] を選択して機能重要度テーブルを表示します。 imageパラメータ:

    • id: 渡されたフィーチャのID。 この例では、f0f1f2f3f4、およびf5の特徴が渡される。 したがって、id列では、0f0の特徴列を表し、4f4の特徴列を表す。 入力テーブルのデータがキーと値のペアの場合、id列にはキーと値のペアのキーが表示されます。

    • value: フィーチャの重要度タイプ。 このパラメーターのデフォルト値はgainです。これは、モデルのフィーチャによって提供される情報ゲインの合計を示します。

    • 前述の特徴重要度テーブルには3つの特徴しかない。 これは、3つのフィーチャのみを使用してツリーを分割することを示します。 他の特徴の特徴重要度は0と考えることができる。

PS-SMARTモデルの展開

PS-SMARTバイナリ分類トレーニングコンポーネントによって生成されたモデルをオンラインサービスとしてEASにデプロイする場合は、PS-SMARTバイナリ分類トレーニングコンポーネントの下流ノードとしてモデルエクスポートコンポーネントを追加し、モデルエクスポートコンポーネントを構成する必要があります。 詳細については、「モデルのエクスポート」をご参照ください。

モデルエクスポートコンポーネントが正常に実行された後、EAS-online Model Servicesページで、生成されたモデルをオンラインサービスとしてEASにデプロイできます。 詳細については、「PAIコンソールでのモデルサービスのデプロイ」をご参照ください。

関連ドキュメント