one-hot編碼(獨熱編碼)將每個具有m個可能值的特徵轉換為m個二元特徵。這些特徵互斥,每次只有一個被啟用,使得經過獨熱編碼後的資料變稀疏,輸出結果也是KV的稀疏結構。
功能介紹
one-hot編碼組件包括訓練和預測功能:
one-hot編碼組件訓練功能:
輸入節點:該組件左輸入節點(輸入表的表名)是訓練資料的輸入,訓練時無需設定輸入節點(右)。
輸出節點:該組件有兩個輸出節點,一個是編碼後的結果表(左),另一個是輸出模型表(右),該模型表用於對同類型的新資料進行one-hot編碼。
one-hot編碼組件預測功能
one-hot組件的右輸入節點(輸入模型表)是one-hot的模型輸入,可以利用已有的one-hot模型對新資料進行one-hot編碼。
組件配置
您可以使用以下任意一種方式,配置one-hot編碼組件參數。
方式一:可視化方式
在Designer工作流程頁面配置組件參數。
頁簽 | 參數 | 描述 |
欄位設定 | 選擇二值化列 | 選擇二值化的欄位,必選項。 |
其他保留特徵 | 勾選的欄位當作保留特徵(不進行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類型。 | Null 字元串 |
appendCols | 否 | 選擇的欄位原封不動地輸出至輸出表中。 | 無 |
outputTable | 是 | one-hot後的結果表,編碼結果儲存在KV欄位中。 | 無 |
inputModelTable | 否 | one-hot編碼的輸入模型表。 說明 inputModelTable和outputModelTable中必須有一個為非Null 字元串。inputModelTable非空時,對應表為非空的模型表。 | Null 字元串 |
outputModelTable | 否 | one-hot編碼的輸出模型表。 說明 inputModelTable和outputModelTable中必須有一個為非Null 字元串。 | Null 字元串 |
lifecycle | 否 | 輸出表的生命週期。 | 7 |
dropLast | 是 | 是否刪除最後一個枚舉量的編碼。該參數為true時,可以保證編碼後資料的線性無關性。 | false |
outputTableType | 是 | 輸出表的類型,包括kv(稀疏表)和table(稠密表)。 當離散特徵較多時,建議輸出kv格式。table僅支援1024列,超出將報錯。 | kv |
ignoreNull | 是 | 是否忽略待編碼資料中的空元素。該參數為true時,表示不對空元素編碼。 | false |
coreNum | 否 | 節點的個數。 | 自動計算 |
memSizePerCore | 否 | 單個結點的記憶體大小,單位為MB,範圍為[2048, 64*1024]。 | 自動計算 |
編碼欄位列中,離散值個數可以支援至千萬量級。
當訓練的模型作為下次編碼使用的模型時,由於dropLast、ignoreNull和reserveCols編碼參數的效果已封裝到模型中,無法進行調整。如果您需要調整,則必須重新訓練。
one-hot編碼產生的kv表預設從0開始編號。
當使用模型編碼新資料時,如果在模型映射表中無法找到資料中的離散量,則忽略該離散量,即不對該離散量編碼。如果需要對其進行編碼,請重新訓練模型映射表。
樣本
輸入表的資料如下。
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
在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;
運行成功後查看輸出結果。
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端的使用說明:
直接使用該組件進行編碼,流程如下。
使用該組件的訓練模型,再通過模型對資料進行編碼,流程如下。