全部產品
Search
文件中心

Platform For AI:one-hot編碼

更新時間:Dec 05, 2024

one-hot編碼(獨熱編碼)將每個具有m個可能值的特徵轉換為m個二元特徵。這些特徵互斥,每次只有一個被啟用,使得經過獨熱編碼後的資料變稀疏,輸出結果也是KV的稀疏結構。

功能介紹

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

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

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

      image

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

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

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

組件配置

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

方式一:可視化方式

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

頁簽

參數

描述

欄位設定

選擇二值化列

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

其他保留特徵

勾選的欄位當作保留特徵(不進行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 字元串。inputModelTable非空時,對應表為非空的模型表。

Null 字元串

outputModelTable

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

說明

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

Null 字元串

lifecycle

輸出表的生命週期。

7

dropLast

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

false

outputTableType

輸出表的類型,包括kv(稀疏表)和table(稠密表)。

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

kv

ignoreNull

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

false

coreNum

節點的個數。

自動計算

memSizePerCore

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

自動計算

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

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

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

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

樣本

  1. 輸入表的資料如下。

    f0(BIGINT)

    f1(STRING)

    f2(DATETIME)

    f3(DOUBLE)

    f4(BOOLEAN)

    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

  2. 在SQL指令碼組件中配置one-hot編碼參數如下。

    PAI -project algo_public -name one_hot --組件預設參數,無需修改
      -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;
  3. 運行成功後查看輸出結果。

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

      第一行為reserve行,列名值固定為_reserve_,儲存reserve資訊。

      col_name

      col_value

      mapping

      _reserve_

      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

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

    • 編碼後的結果表

      table

      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

擴充性測試

測試資料:樣本數為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端的使用說明:

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

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