全部产品
Search
文档中心

人工智能平台 PAI:one-hot编码

更新时间:Dec 04, 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类型。

空字符串

appendCols

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

outputTable

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

inputModelTable

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

说明

inputModelTableoutputModelTable中必须有一个为非空字符串。inputModelTable非空时,对应表为非空的模型表。

空字符串

outputModelTable

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

说明

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

空字符串

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

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

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