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。 |
输出表的类型 | 包括kv和table。当离散特征较多时,建议输出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编码的输入模型表。 说明 inputModelTable和outputModelTable中必须有一个为非空字符串。 | 空字符串 |
outputModelTable | 否 | one-hot编码的输出模型表。 说明 inputModelTable和outputModelTable中必须有一个为非空字符串。 | 空字符串 |
lifecycle | 否 | 输出表的生命周期 | 7 |
dropLast | 是 | 是否删除最后一个枚举量的编码。该参数为true时,可以保证编码后数据的线性无关性。 | false |
outputTableType | 是 | 输出表的类型,包括稀疏表和稠密表。当离散特征较多时,建议输出kv格式。table仅支持1024列,超出将报错。 | kv |
ignoreNull | 是 | 是否忽略待编码数据中的空元素。该参数为true时,表示不对空元素编码。 | false |
coreNum | 否 | 节点的个数。 | 自动计算 |
memSizePerCore | 否 | 单个结点的内存大小,单位为MB,范围为[2048, 64*1024]。 | 自动计算 |
inputModelTable、outputModelTable至少一个参数非空。当inputModelTable非空时,其对应的表应该为非空的模型表。
编码字段列中,离散值个数可以支持至千万量级。
当训练的模型作为下次编码使用的模型时,由于dropLast、ignoreNull和reserveCols编码参数的效果已封装到模型中,无法进行调整。如果您需要调整,则必须重新训练。
建议输出表使用kv格式。当使用表时,列数最多为1024列。当超出该值则会报错,无法完成编码任务。
one-hot编码生成的kv表默认从0开始编号。
当使用模型编码新数据时,如果在模型映射表中无法找到数据中的离散量,则忽略该离散量,即不对该离散量编码。如果需要对其进行编码,请重新训练模型映射表。
示例
使用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;
测试输入表如下。
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类型。
测试结果为映射模型表。
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端的使用说明:
直接使用该组件进行编码,实验流程如下。
使用该组件的训练模型,再通过模型对数据进行编码,实验流程如下。