全部產品
Search
文件中心

Platform For AI:one-hot編碼

更新時間:Jul 13, 2024

one-hot編碼,也稱獨熱編碼,對於每一個特徵,如果它有m個可能值,那麼經過獨熱編碼後,就變成了m個二元特徵。此外,這些特徵互斥,每次只有一個啟用。因此,經過獨熱編碼後資料會變成稀疏的,輸出結果也是KV的稀疏結構。

功能介紹

one-hot編碼組件包括訓練和預測功能:

  • one-hot編碼組件訓練功能:

    • 輸入節點:該組件第一個輸入節點(左)是訓練資料的輸入,訓練時無需設定輸入節點(右)。

    • 輸出節點:該組件有兩個輸出節點,一個是編碼後的結果資料表(左),另一個是模型表(右),該模型表用於對同類型的新資料進行one-hot編碼。

  • one-hot編碼組件預測功能

    one-hot組件的第二個輸入節點(右)是one-hot的模型輸入,可以利用已有的one-hot模型對新資料進行one-hot編碼。

組件配置

您可以使用以下任意一種方式,配置one-hot編碼組件參數。

方式一:可視化方式

Designer工作流程頁面配置組件參數。

頁簽

參數

描述

欄位設定

選擇二值化列

選擇二值化的欄位,必選項。

其他保留特徵

勾選特徵保留輸出在KV對。勾選的欄位當作特徵(不進行one-hot編碼)輸出至KV欄位中,保留的特徵會從0開始編碼,該欄位必須為DOUBLE類型。

附加列

附加在輸出表的列,可選項。

參數設定

生命週期

表的生命週期,預設值為7。

輸出表的類型

包括kvtable。當離散特徵較多時,建議輸出kv格式,table僅支援1024列,超出將報錯。

節點個數

節點的個數。

單個結點記憶體大小

單個結點的記憶體大小,單位為MB。

刪除最後一個枚舉量的編碼

該參數為true時,可以保證編碼後資料的線性無關性。

忽略待編碼資料中的空元素

該參數為true時,表示不對空元素編碼。

方式二: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

one-hot編碼欄位,必須是枚舉類特徵,欄位可以是任意類型。

reserveCols

勾選的欄位當作特徵(不進行one-hot編碼)輸出至KV欄位中,保留的特徵會從0開始編碼,該欄位必須為DOUBLE類型。

Null 字元串

appendCols

勾選的欄位原封不動地輸出輸入表的欄位至輸出表中。

outputTable

one-hot後的結果表,編碼結果儲存在KV欄位中。

inputModelTable

one-hot編碼的輸入模型表。

說明

inputModelTableoutputModelTable中必須有一個為非Null 字元串。

Null 字元串

outputModelTable

one-hot編碼的輸出模型表。

說明

inputModelTableoutputModelTable中必須有一個為非Null 字元串。

Null 字元串

lifecycle

輸出表的生命週期

7

dropLast

是否刪除最後一個枚舉量的編碼。該參數為true時,可以保證編碼後資料的線性無關性。

false

outputTableType

輸出表的類型,包括稀疏表和稠密表。當離散特徵較多時,建議輸出kv格式。table僅支援1024列,超出將報錯。

kv

ignoreNull

是否忽略待編碼資料中的空元素。該參數為true時,表示不對空元素編碼。

false

coreNum

節點的個數。

自動計算

memSizePerCore

單個結點的記憶體大小,單位為MB,範圍為[2048, 64*1024]。

自動計算

說明
  • inputModelTableoutputModelTable至少一個參數非空。當inputModelTable非空時,其對應的表應該為非空的模型表。

  • 編碼欄位列中,離散值個數可以支援至千萬量級。

  • 當訓練的模型作為下次編碼使用的模型時,由於dropLastignoreNullreserveCols編碼參數的效果已封裝到模型中,無法進行調整。如果您需要調整,則必須重新訓練。

  • 建議輸出表使用kv格式。當使用表時,列數最多為1024列。當超出該值則會報錯,無法完成編碼任務。

  • one-hot編碼產生的kv表預設從0開始編號。

  • 當使用模型編碼新資料時,如果在模型映射表中無法找到資料中的離散量,則忽略該離散量,即不對該離散量編碼。如果需要對其進行編碼,請重新訓練模型映射表。

樣本

  1. 使用SQL語句,產生訓練資料。

    PAI -project projectxlib4
      -name one_hot
      -DinputTable=one_hot_yh
      -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;
  2. 測試輸入表如下。

    f0

    f1

    f2

    f3

    f4

    12

    prefix1

    1970-09-15 12:50:22

    0.1

    true

    12

    prefix3

    1971-01-22 03:15:33

    0.4

    false

    NULL

    prefix3

    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

    prefix1

    1970-09-15 12:50:22

    0.2

    true

    3

    prefix1

    1970-09-15 12:50:22

    0.3

    false

    3

    prefix3

    1970-01-01 08:00:00

    0.2

    true

    3

    prefix3

    1971-01-22 03:15:33

    0.1

    false

    NULL

    prefix3

    1970-01-01 08:00:00

    0.3

    false

    該輸入表中,f0為BIGINT類型、f1為STRING類型、f2為DATETIME類型、f3為DOUBLE類型、f4為BOOL類型。

  3. 測試結果為映射模型表。

    col_name

    col_value

    mapping

    _reserve_

    f3

    0

    f0

    12

    1

    f0

    3

    2

    f0

    34

    3

    f0

    null

    4

    f2

    22222222222

    5

    f2

    33333333333

    6

    f2

    4

    7

    f4

    0

    8

    f4

    1

    9

    f4

    null

    10

    結果表中最上面一行為reserve行,列名值固定為reserve,儲存reserve資訊。其餘行對應的是編碼映射資訊:

    • 編碼後的表(table)

      f0

      f1

      f3

      f4

      _reserve__f3_0

      f0_12_1

      f0_3_2

      f0_34_3

      f0_null_4

      f2_22222222_5

      f2_33333333_6

      f2_4_7

      f4_0_8

      f4_1_9

      f4_null_10

      12

      prefix1

      0.1

      true

      0.1

      1.0

      0.0

      0.0

      0.0

      1.0

      0.0

      0.0

      0.0

      1.0

      0.0

      12

      prefix3

      0.4

      false

      0.4

      1.0

      0.0

      0.0

      0.0

      0.0

      1.0

      0.0

      1.0

      0.0

      0.0

      NULL

      prefix3

      0.2

      NULL

      0.2

      0.0

      0.0

      0.0

      1.0

      0.0

      0.0

      1.0

      0.0

      0.0

      1.0

      3

      NULL

      0.3

      false

      0.3

      0.0

      1.0

      0.0

      0.0

      0.0

      0.0

      1.0

      1.0

      0.0

      0.0

      34

      NULL

      0.4

      NULL

      0.4

      0.0

      0.0

      1.0

      0.0

      1.0

      0.0

      0.0

      0.0

      0.0

      1.0

      3

      prefix1

      0.2

      true

      0.2

      0.0

      1.0

      0.0

      0.0

      1.0

      0.0

      0.0

      0.0

      1.0

      0.0

      3

      prefix1

      0.3

      false

      0.3

      0.0

      1.0

      0.0

      0.0

      1.0

      0.0

      0.0

      1.0

      0.0

      0.0

      3

      prefix3

      0.2

      true

      0.2

      0.0

      1.0

      0.0

      0.0

      0.0

      0.0

      1.0

      0.0

      1.0

      0.0

      3

      prefix3

      0.1

      false

      0.1

      0.0

      1.0

      0.0

      0.0

      0.0

      1.0

      0.0

      1.0

      0.0

      0.0

      NULL

      prefix3

      0.3

      false

      0.3

      0.0

      0.0

      0.0

      1.0

      0.0

      0.0

      1.0

      1.0

      0.0

      0.0

    • 編碼後的表(kv)

      f0

      f1

      f3

      f4

      kv

      12

      prefix1

      0.1

      true

      0:0.1,1:1,5:1,9:1

      12

      prefix3

      0.4

      false

      0:0.4,1:1,6:1,8:1

      NULL

      prefix3

      0.2

      NULL

      0:0.2,4:1,7:1,10:1

      3

      NULL

      0.3

      false

      0:0.3,2:1,7:1,8:1

      34

      NULL

      0.4

      NULL

      0:0.4,3:1,5:1,10:1

      3

      prefix1

      0.2

      true

      0:0.2,2:1,5:1,9:1

      3

      prefix1

      0.3

      false

      0:0.3,2:1,5:1,8:1

      3

      prefix3

      0.2

      true

      0:0.2,2:1,7:1,9:1

      3

      prefix3

      0.1

      false

      0:0.1,2:1,6:1,8:1

      NULL

      prefix3

      0.3

      false

      0:0.3,4:1,7:1,8:1

擴充性測試

測試資料:樣本數為2億,枚舉量為10萬。測試資料表如下。

f0

f1

94

prefix3689

9664

prefix5682

2062

prefix5530

9075

prefix9854

9836

prefix1764

5140

prefix1149

3455

prefix7272

2508

prefix7139

7993

prefix1551

5602

prefix4606

3132

prefix5767

測試結果如下。

core num

train time

predict time

加速比

5

84s

181s

1/1

10

60s

93s

1.4/1.95

20

46s

56s

1.8/3.23

Web端的使用說明:

  • 直接使用該組件進行編碼,實驗流程如下。流程

  • 使用該組件的訓練模型,再通過模型對資料進行編碼,實驗流程如下。實驗