文档

one-hot编码

更新时间:

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类型。

空字符串

appendCols

勾选的字段原封不动地输出输入表的字段至输出表中。

outputTable

one-hot后的结果表,编码结果保存在KV字段中。

inputModelTable

one-hot编码的输入模型表。

说明

inputModelTableoutputModelTable中必须有一个为非空字符串。

空字符串

outputModelTable

one-hot编码的输出模型表。

说明

inputModelTableoutputModelTable中必须有一个为非空字符串。

空字符串

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端的使用说明:

  • 直接使用该组件进行编码,实验流程如下。流程

  • 使用该组件的训练模型,再通过模型对数据进行编码,实验流程如下。实验

  • 本页导读 (1)