1つのホットエンコーディングは、m個の可能な値を持つ特徴をm個のバイナリ特徴に変換します。 任意の時点でアクティブなフィーチャは1つだけであり、その結果、スパースデータセットのポストエンコーディングが行われます。 出力はスパースキー値構造です。
概要
One Hot Encodingコンポーネントは、トレーニングと予測の機能を提供します。
トレーニング:
入力ノード: 左側の入力ノード (入力テーブル名) はトレーニングデータ用です。 トレーニング中、右の入力ノードは必要ありません。
出力ノード: コンポーネントは2つの出力ノードを提供します。 左のノードはエンコードされた結果テーブルであり、右のノードは同じタイプの新しいデータをエンコードするために使用されるモデルテーブルです。
予測:
右側の入力ノード (入力モデルテーブル) はモデル入力用です。 既存の1つのホットモデルを使用して、新しいデータをエンコードできます。
コンポーネントの設定
次のいずれかの方法を使用して、one Hot Encodingコンポーネントを設定できます。
方法1: パイプラインページでコンポーネントを設定する
パイプラインページで次のパラメーターを設定します。
タブ | パラメーター | 説明 |
フィールド設定 | バイナリ列の選択 | 必須。 バイナリ化が必要なフィールド。 |
その他の予約済み機能 | キーと値の形式で予約およびエクスポートされる機能。 選択したフィールドは、キーと値の形式でフィーチャとしてエクスポートされます。 フィールドはDOUBLE型でなければなりません。 それらはワンホット符号化の対象ではなく、0から符号化される。 | |
追加された列 | 必要に応じて、 出力テーブルに追加される列。 | |
パラメーター設定 | ライフサイクル | 出力テーブルのライフサイクル。 デフォルト値 : 7 |
出力テーブルタイプ | 出力テーブルのタイプ。 有効な値: KVおよびTable。 離散化が必要なフィーチャの数が多い場合は、このパラメーターをKVに設定することを推奨します。 このパラメーターをTableに設定すると、出力テーブルに最大1,024個の列を含めることができます。 | |
コア | コアの数。 | |
ノードあたりのメモリサイズ | 各コアのメモリサイズ。 単位:MB。 | |
最後の列挙のエンコーディングの削除 | trueに設定すると、エンコードされたデータの線形独立性が保証されます。 | |
空の要素を無視 | trueに設定した場合、空の要素はエンコードされません。 |
方法2: PAIコマンドを使用する
PAIコマンドを使用してコンポーネントパラメータを設定します。 SQLスクリプトコンポーネントを使用してPAIコマンドを呼び出すことができます。 詳細については、「SQLスクリプト」をご参照ください。
PAI -name one_hot
-project algo_public
-DinputTable=one_hot_test
-DbinaryCols=f0,f1,f2
-DmodelTable=one_hot_model
-DoutputTable=one_hot_output
-Dlifecycle=28;
パラメーター | 必須 / 任意 | 説明 | デフォルト値 |
inputTable | 可 | 入力テーブルの名前。 | なし |
inputTablePartitions | 不可 | トレーニング用に入力テーブルから選択されたパーティション。 | 入力テーブルのすべてのパーティション |
binaryCols | 可 | ワンホットエンコードが必要なフィールド。 これらのフィールドは列挙機能である必要があり、そのデータ型は制限されません。 | なし |
reserveCols | 不可 | キーと値の形式でフィーチャとしてエクスポートされる選択されたフィールド。 フィールドはDOUBLE型でなければなりません。 それらはワンホット符号化の対象ではなく、0から符号化される。 | Empty string |
appendCols | 不可 | 出力テーブルにエクスポートされる選択されたフィールドは、入力テーブルと同じです。 | なし |
outputTable | 可 | ワンホットエンコード後に生成される出力テーブル。 エンコード結果はkey-value形式で保存されます。 | なし |
inputModelTable | 不可 | エンコードに使用されるモデルテーブル。 説明 inputModelTableとoutputModelTableのいずれかが空でない文字列である必要があります。 inputModelTableが空でない場合、対応するテーブルは空でないモデルテーブルである必要があります。 | Empty string |
outputModelTable | 不可 | 出力モデルテーブル。 説明 inputModelTableとoutputModelTableのいずれかが空でない文字列である必要があります。 | Empty string |
ライフサイクル | 不可 | 出力テーブルのライフサイクル。 | 7 |
dropLast | 可 | 最後の列挙子のエンコード結果を削除するかどうかを指定します。 このパラメータがtrueに設定されている場合、エンコードされたデータの線形独立性が保証されます。 | false |
outputTableType | 可 | 出力テーブルのタイプ。 有効な値: kv (疎テーブル) およびtable (密テーブル) 。 離散化が必要なフィーチャの数が多い場合は、このパラメーターをkvに設定することを推奨します。 このパラメーターをtableに設定すると、出力テーブルに最大1,024個の列を含めることができます。 エクスポートされた列の数が値を超えると、エラーが報告されます。 | kv |
ignoreNull | 可 | エンコーディングが必要なデータの空の要素を無視するかどうかを指定します。 このパラメーターをtrueに設定すると、空の要素はエンコードされません。 | false |
coreNum | 不可 | コアの数。 | システムによって決定される |
memSizePerCore | 不可 | 各コアのメモリサイズ。 単位:MB。 有効値: [2048,64 × 1024] 。 | システムによって決定される |
エンコーディングフィールド列は、最大数千万の離散値をサポートできます。
後続のエンコーディングにトレーニング済みモデルを使用する場合、パラメーターdropLast、ignoreNull、およびreserveColsはモデル内で固定され、変更できません。 これらのパラメータを変更するには、再度トレーニングする必要があります。
デフォルトでは、One Hot Encodingによって生成されるkvテーブルはゼロベースの番号付けを使用します。
モデルを使用して新しいデータをエンコードするとき、データがモデルのマッピングテーブルに存在しない離散値を含む場合、これらの値は無視され、エンコードされません。 これらの値をエンコードするには、モデルマッピングテーブルを再トレーニングする必要があります。
例:
サンプル入力データ。
f0(BIGINT)
f1 (ストリング)
f2 (日付)
f3 (ダブル)
f4 (ブーリアン)
12
プレフィックス1
1970-09-15 12:50:22
0.1
true
12
プレフィックス3
1971-01-22 03:15:33
0.4
false
NULL
プレフィックス3
1970-01-01 08:00:00
0.2
NULL
3
NULL
1970-01-01 08:00:00
0.3
false
34
NULL
1970-09-15 12:50:22
0.4
NULL
3
プレフィックス1
1970-09-15 12:50:22
0.2
true
3
プレフィックス1
1970-09-15 12:50:22
0.3
false
3
プレフィックス3
1970-01-01 08:00:00
0.2
true
3
プレフィックス3
1971-01-22 03:15:33
0.1
false
NULL
プレフィックス3
1970-01-01 08:00:00
0.3
false
SQLスクリプトコンポーネントでOne Hot Encodingパラメーターを次のように設定します。
PAI -project algo_public -name one_hot --Default component parameters, no modification needed -DinputTable=one_hot -DbinaryCols=f0,f2,f4 -DoutputModelTable=one_hot_model_8 -DoutputTable=one_hot_in_table_1_output_8 -DdropLast=false -DappendCols=f0,f2,f4 -DignoreNull=false -DoutputTableType=table -DreserveCols=f3 -DcoreNum=4 -DmemSizePerCore=2048;
実行が成功したら、出力結果を表示します。
One Hot Encodingからの出力モデルテーブルは次のとおりです。
col_name
col_値
マッピング
_予約_
f3
0
f0
12
1
f0
3
2
f0
34
3
f0
null
4
f2
0
5
f2
22222222000
6
f2
33333333000
7
f4
0
8
f4
1
9
f4
null
10
モデルマッピングテーブルの一番上の行は予約行で、列名は予約に固定されています。 この行には、リザーブ情報が格納されます。 残りの行は、符号化のマッピング情報に対応する。
エンコードされた結果テーブル
テーブル
f0
f2
f4
_reserve__f3_0
f0_12_1
f0_3_2
f0_34_3
f0_null_4
f2_0_5
f2_22222222_6
f2_33333333_7
f4_0_8
f4_1_9
f4_null_10
12
1970-09-15 12:50:22
true
0.1
1.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
1.0
0.0
12
1971-01-22 03:15:33
false
0.4
1.0
0.0
0.0
0.0
0.0
0.0
1.0
1.0
0.0
0.0
NULL
1970-01-01 08:00:00
NULL
0.2
0.0
0.0
0.0
1.0
1.0
0.0
0.0
0.0
0.0
1.0
3
1970-01-01 08:00:00
false
0.3
0.0
1.0
0.0
0.0
1.0
0.0
0.0
1.0
0.0
0.0
34
1970-09-15 12:50:22
NULL
0.4
0.0
0.0
1.0
0.0
0.0
1.0
0.0
0.0
0.0
1.0
3
1970-09-15 12:50:22
true
0.2
0.0
1.0
0.0
0.0
0.0
1.0
0.0
0.0
1.0
0.0
3
1970-09-15 12:50:22
false
0.3
0.0
1.0
0.0
0.0
0.0
1.0
0.0
1.0
0.0
0.0
3
1970-01-01 08:00:00
true
0.2
0.0
1.0
0.0
0.0
1.0
0.0
0.0
0.0
1.0
0.0
3
1971-01-22 03:15:33
false
0.1
0.0
1.0
0.0
0.0
0.0
0.0
1.0
1.0
0.0
0.0
NULL
1970-01-01 08:00:00
false
0.3
0.0
0.0
0.0
1.0
1.0
0.0
0.0
1.0
0.0
0.0
KV
f0
f2
f4
kv
12
1970-09-15 12:50:22
true
0:0.1,1:1,6:1,9:1
12
1971-01-22 03:15:33
false
0:0.4,1:1,7:1,8:1
NULL
1970-01-01 08:00:00
NULL
0:0.2,4:1,5:1,10:1
3
1970-01-01 08:00:00
false
0:0.3,2:1,5:1,8:1
34
1970-09-15 12:50:22
NULL
0:0.4,3:1,6:1,10:1
3
1970-09-15 12:50:22
true
0:0.2,2:1,6:1,9:1
3
1970-09-15 12:50:22
false
0:0.3,2:1,6:1,8:1
3
1970-01-01 08:00:00
true
0:0.2,2:1,5:1,9:1
3
1971-01-22 03:15:33
false
0:0.1,2:1,7:1,8:1
NULL
1970-01-01 08:00:00
false
0:0.3,4:1,5:1,8:1
スケーラビリティテスト
テストデータ: サンプル数は200万、列挙子数は100,000です。 試験データを以下の表に示す。
f0 | f1 |
94 | プレフィックス3689 |
9664 | プレフィックス5682 |
2062 | prefix5530 |
9075 | プレフィックス9854 |
9836 | プレフィックス1764 |
5140 | prefix1149 |
3455 | プレフィックス7272 |
2508 | プレフィックス7139 |
7993 | prefix1551 |
5602 | プレフィックス4606 |
3132 | プレフィックス5767 |
テスト結果を次の表に示します。
コアnum | 電車の時間 | 予測時間 | 加速比 |
5 | 84s | 181s | 1/1 |
10 | 60s | 93s | 1.4/1.95 |
20 | 46s | 56s | 1.8/3.23 |
コンソールのメモを使用する
エンコードにコンポーネントを直接使用します。
コンポーネントを使用してモデルをトレーニングします。 次に、モデルを使用してデータをエンコードします。