one-hot编码,也称独热编码,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。此外,这些特征互斥,每次只有一个激活。因此,经过独热编码后数据会变成稀疏的,输出结果也是KV的稀疏结构。

功能介绍

one-hot编码组件包括训练和预测功能:
  • one-hot编码组件训练功能:
    • 输入节点:该组件第一个输入节点(左)是训练数据的输入,训练时无需设置输入节点(右)。
    • 输出节点:该组件有两个输出节点,一个是编码后的结果数据表(左),另一个是模型表(右),该模型表用于对同类型的新数据进行one-hot编码。
  • one-hot编码组件预测功能

    one-hot组件的第二个输入节点(右)是one-hot的模型输入,可以利用已有的one-hot模型对新数据进行one-hot编码。

参数配置

您可以通过以下任意一种方式,配置one-hot组件参数:
  • 可视化方式
    页签 参数 描述
    字段设置 选择二值化列 选择二值化的字段,必选项。
    其他保留特征 勾选特征保留输出在KV对。勾选的字段当作特征(不进行one-hot编码)输出至KV字段中,保留的特征会从0开始编码,该字段必须为DOUBLE类型。
    附加列 附加在输出表的列,可选项。
    参数设置 生命周期 表的生命周期,默认值为7。
    输出表的类型 包括kvtable。当离散特征较多时,建议输出kv格式,table仅支持1024列,超出将报错。
    节点个数 节点的个数。
    单个结点内存大小 单个结点的内存大小,单位为MB。
    删除最后一个枚举量的编码 该参数为true时,可以保证编码后数据的线性无关性。
    忽略待编码数据中的空元素 该参数为true时,表示不对空元素编码。
  • PAI命令方式
    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为DATATIME类型、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端的使用说明:
  • 直接使用该组件进行编码,实验流程如下。流程
  • 使用该组件的训练模型,再通过模型对数据进行编码,实验流程如下。实验